Analysing Heart Rate and Respiration data

The goal of this assignment is to first familiarize you with heart rate, and respiration data and their preprocessing. The second part explores how to analyze interpersonal coordination of these signals.

These are the questions you need to be able to answer at the end of the assignment (aka that you need to submit as part of the portfolio)

  1. How do you preprocess heart rate and respiration data? Describe the process. If any data needs to be excluded, list the excluded data and motivate the exclusion.

  2. Do you observe interpersonal coordination in heart rate and respiration? Describe your control baseline, the method used to quantify coordination, and the statistical models used to infer whether coordination was higher than in the baseline. Report the results of the models.

  3. Do you observe differences in coordination between conditions? Report the models and results.

  4. Is respiration coordination a likely driver of heart rate coordination? Describe how you would test for it. Bonus points if you actually run the tests and report methods and results.

N.B. to give you a bit more data I included data from last year (Study1) and from your class (Study2). Note that synchronouns and turn-taking are the same across both studies, but the third condition is different: last year it was self-paced joint reading; this year it was the tv-series conversation. So you might want to exclude the self-paced reading (but, up to you!)

Step by step suggestions to solve the assignment

Exploring physiological signals

  • Choose one pair (one pair, three conditions)
  • Load the logs
  • Produce a plot of the participants’ respiration signal and a different one of the participants’ HR signal (for inspecting whether the data is usable) N.B: remember the slides: artifacts, downsampling, scaling. N.B. The gridExtra::grid.arrange() function allows you to display the plots side by side. E.g. grid.arrange(plot1, plot2, plot3, ncol=3)
  • Can you eye-ball which condition if any displays more physiological coordination?

  • Run crqa on heart rate and respiration data (find parameters, run crqa)
  • Does this tell you more than just eyeballing the plots?

# Set working directory
setwd("~/OneDrive - Aarhus universitet/AU-Cognitive Science/3rd Semester/Experimental Methods 3/Exercise/Assignments/Assignment_3NEW")
# Load relevant packages
library(ggplot2); library(groupdata2); library(dplyr); library(crqa); library(stringr); library(readr)
pakke ‘ggplot2’ blev bygget under R version 3.3.2pakke ‘groupdata2’ blev bygget under R version 3.3.2pakke ‘dplyr’ blev bygget under R version 3.3.2
Vedhæfter pakke: ‘dplyr’

De følgende objekter er maskerede fra ‘package:stats’:

    filter, lag

De følgende objekter er maskerede fra ‘package:base’:

    intersect, setdiff, setequal, union

Indlæser krævet pakke: Matrix
pakke ‘Matrix’ blev bygget under R version 3.3.2Indlæser krævet pakke: tseriesChaos
Indlæser krævet pakke: deSolve
pakke ‘deSolve’ blev bygget under R version 3.3.2Indlæser krævet pakke: fields
pakke ‘fields’ blev bygget under R version 3.3.2Indlæser krævet pakke: spam
pakke ‘spam’ blev bygget under R version 3.3.2Indlæser krævet pakke: dotCall64
Indlæser krævet pakke: grid
kunne ikke tildele RegisteredNativeSymbol for toeplitz til toeplitz da toeplitz allerede er defineret i navnerummet ‘spam’Spam version 2.1-1 (2017-07-02) is loaded.
Type 'help( Spam)' or 'demo( spam)' for a short introduction 
and overview of this package.
Help for individual functions is also obtained by adding the
suffix '.spam' to the function name, e.g. 'help( chol.spam)'.

Vedhæfter pakke: ‘spam’

De følgende objekter er maskerede fra ‘package:base’:

    backsolve, forwardsolve

Indlæser krævet pakke: maps
pakke ‘maps’ blev bygget under R version 3.3.2Indlæser krævet pakke: plot3D
pakke ‘plot3D’ blev bygget under R version 3.3.2Indlæser krævet pakke: pracma
pakke ‘pracma’ blev bygget under R version 3.3.2
Vedhæfter pakke: ‘pracma’

Det følgende objekt er maskeret fra ‘package:deSolve’:

    rk4

De følgende objekter er maskerede fra ‘package:Matrix’:

    expm, lu, tril, triu

pakke ‘stringr’ blev bygget under R version 3.3.2pakke ‘readr’ blev bygget under R version 3.3.2
# Load in datafile
Synch_data=read.csv("Data/Study2_G5_T1_Synchronous.csv")
Turn_data=read.csv("Data/Study2_G5_T2_TurnTaking.csv")
Conv_data=read.csv("Data/Study2_G5_T3_Conversation.csv")
# To create plots for respiration 
ggplot(Conv_data, aes(x=time, y= Resp1)) + geom_line(color = "blue") + geom_line(aes(x=time, y=Resp2, color ="red")) + theme(legend.position="none")

ggplot(Turn_data, aes(x=time, y= Resp1)) + geom_line(color = "blue") + geom_line(aes(x=time, y=Resp2, color ="red")) + theme(legend.position="none")

ggplot(Synch_data, aes(x=time, y= Resp1)) + geom_line(color = "blue") + geom_line(aes(x=time, y=Resp2, color ="red")) + theme(legend.position="none")

# To create plots for heart rate
ggplot(Conv_data, aes(x=time, y= HR1)) + geom_line(color = "purple") + geom_line(aes(x=time, y=HR2), color = "chartreuse4")

ggplot(Turn_data, aes(x=time, y= HR1)) + geom_line(color = "purple") + geom_line(aes(x=time, y=HR2), color = "chartreuse4")

ggplot(Synch_data, aes(x=time, y= HR1)) + geom_line(color = "purple") + geom_line(aes(x=time, y=HR2), color = "chartreuse4")

# To downsample data
Conv_data = Conv_data %>% group(n = 100, method = 'greedy') %>%   dplyr::summarise(time = mean(time,na.rm=T), HR1 = mean(HR1,na.rm=T), HR2 = mean(HR2,na.rm=T), Resp1 = mean(Resp1,na.rm=T), Resp2 = mean(Resp2,na.rm=T))
package ‘bindrcpp’ was built under R version 3.3.2
Synch_data = Synch_data %>% group(n = 100, method = 'greedy') %>%   dplyr::summarise(time = mean(time,na.rm=T), HR1 = mean(HR1,na.rm=T), HR2 = mean(HR2,na.rm=T), Resp1 = mean(Resp1,na.rm=T), Resp2 = mean(Resp2,na.rm=T))
Turn_data = Turn_data %>% group(n = 100, method = 'greedy') %>%   dplyr::summarise(time = mean(time,na.rm=T), HR1 = mean(HR1,na.rm=T), HR2 = mean(HR2,na.rm=T), Resp1 = mean(Resp1,na.rm=T), Resp2 = mean(Resp2,na.rm=T))
# To remove outliers
removeOuts <- function(ts,threshold){
  ts[ts > (mean(ts,na.rm=T) +              (threshold*sd(ts,na.rm=T))) |  ts < (mean(ts,na.rm=T) -           (threshold*sd(ts,na.rm=T)))] = mean(ts,na.rm=T)   
  return(ts)}
threshold=2.5 
Conv_data$HR1=removeOuts(Conv_data$HR1,threshold)
Conv_data$HR2=removeOuts(Conv_data$HR2,threshold)
Turn_data$HR1=removeOuts(Turn_data$HR1, threshold)
Turn_data$HR2=removeOuts(Turn_data$HR2, threshold)
Synch_data$HR1=removeOuts(Synch_data$HR1, threshold)
Synch_data$HR2=removeOuts(Synch_data$HR2, threshold)
Conv_data$Resp1=removeOuts(Conv_data$Resp1,threshold)
Conv_data$Resp2=removeOuts(Conv_data$Resp2,threshold)
Turn_data$Resp1=removeOuts(Turn_data$Resp1, threshold)
Turn_data$Resp2=removeOuts(Turn_data$Resp2, threshold)
Synch_data$Resp1=removeOuts(Synch_data$Resp1, threshold)
Synch_data$Resp2=removeOuts(Synch_data$Resp2, threshold)
# To scale data
Conv_data$Resp1S=scale(Conv_data$Resp1)
Conv_data$Resp2S=scale(Conv_data$Resp2)  
Conv_data$HR1S=scale(Conv_data$HR1)
Conv_data$HR2S=scale(Conv_data$HR2)
Turn_data$Resp1S=scale(Turn_data$Resp1)
Turn_data$Resp2S=scale(Turn_data$Resp2)  
Turn_data$HR1S=scale(Turn_data$HR1)
Turn_data$HR2S=scale(Turn_data$HR2)
Synch_data$Resp1S=scale(Synch_data$Resp1)
Synch_data$Resp2S=scale(Synch_data$Resp2)  
Synch_data$HR1S=scale(Synch_data$HR1)
Synch_data$HR2S=scale(Synch_data$HR2)
# To create HR plot for sclaed data
plot1 = ggplot(Conv_data, aes(x=time, y= HR1S)) + geom_line(color = "purple") + geom_line(aes(x=time, y=HR2S), color = "chartreuse4")
plot2 = ggplot(Turn_data, aes(x=time, y= HR1S)) + geom_line(color = "purple") + geom_line(aes(x=time, y=HR2S), color = "chartreuse4")
plot3 = ggplot(Synch_data, aes(x=time, y= HR1S)) + geom_line(color = "purple") + geom_line(aes(x=time, y=HR2S), color = "chartreuse4")
# To make one grid with all HR plots
gridExtra::grid.arrange(plot1, plot2, plot3)

plot4 = ggplot(Conv_data, aes(x=time, y= Resp1S)) + geom_line(color = "red") + geom_line(aes(x=time, y=Resp2S), color = "blue")
plot5 = ggplot(Turn_data, aes(x=time, y= Resp1S)) + geom_line(color = "red") + geom_line(aes(x=time, y=Resp2S), color = "blue")
plot6 = ggplot(Synch_data, aes(x=time, y= Resp1S)) + geom_line(color = "red") + geom_line(aes(x=time, y=Resp2S), color = "blue")
# To make one grid with all Respiration plots
gridExtra::grid.arrange(plot4, plot5, plot6)

# To perform CRQA
par = list(lgM =  50, steps = seq(1, 6, 1),  radiusspan = 100,  radiussample = 40, normalize = 0,  rescale = 0,  mindiagline = 2,  minvertline = 2,  tw = 0,  whiteline = FALSE,  recpt = FALSE,  fnnpercent = 10,  typeami = "mindip")
# To create a loop to get paramters 
files = list(Conv_data, Synch_data, Turn_data)
Dimension_Resp = NULL
Radius_Resp = NULL
Delay_Resp = NULL
Dimension_HR = NULL
Radius_HR = NULL
Delay_HR = NULL
n=1
for (file in files) {
ans_Resp = try(optimizeParam(file$Resp1S, file$Resp2S, par, min.rec = 2, max.rec = 8))
ans_HR = try(optimizeParam(file$HR1S, file$HR2S, par, min.rec = 2, max.rec = 8))
if (length(ans_Resp) > 1) {
  
Dimension_Resp[n] = ans_Resp$emddim
Radius_Resp[n] = ans_Resp$radius
Delay_Resp[n] = ans_Resp$delay
  } 
  
  else {
    
Dimension_Resp[n] = NA
Radius_Resp[n] = NA
Delay_Resp[n] = NA
    
  }
if (length(ans_HR) > 1) {
  
Dimension_HR[n] = ans_HR$emddim
Radius_HR[n] = ans_HR$radius
Delay_HR[n] = ans_HR$delay
  } 
  
  else {
    
Dimension_HR[n] = NA
Radius_HR[n] = NA
Delay_HR[n] = NA
    
  }
  
n=n+1
}
Optimal Radius Not found: try again choosing a wider radius span and larger sample sizeOptimal Radius Not found: try again choosing a wider radius span and larger sample sizeOptimal Radius Not found: try again choosing a wider radius span and larger sample sizeOptimal Radius Not found: try again choosing a wider radius span and larger sample size
parameters = data.frame(Dimension_Resp, Radius_Resp, Delay_Resp, Dimension_HR, Radius_HR, Delay_HR)
mean(parameters$Dimension_Resp, na.rm = TRUE) # 2
[1] 2
mean(parameters$Delay_Resp, na.rm = TRUE) # 28
[1] 28
mean(parameters$Radius_Resp, na.rm = TRUE) # 0.378
[1] 0.3778026
Results=crqa (Synch_data$Resp1S, Synch_data$Resp2S, delay=28, embed=2, radius= 0.378,normalize=0,rescale=0,mindiagline = 2,minvertline = 2)
# To plot RQA
RP=Results$RP 
RP = matrix(as.numeric(RP), nrow = ncol(RP))  
cols = c("white","blue4") 
image(RP, xlab = "", ylab = "", col = cols)

# To explore lags of coordination 
Profile=drpdfromts(Synch_data$Resp1S, Synch_data$Resp2S,datatype = 'continuous',ws=50,radius=0.443) 
timecourse = round( seq(-5000,5000,100)/1000, digit = 1) 
maxlag = Profile$maxlag/1000 
profile = Profile$profile*100 
Prof=data.frame(profile) 
ggplot(Prof, aes(timecourse,profile))+geom_line()+ geom_vline(xintercept = timecourse[maxlag], colour='red')

Systematically pre-process the data

  • Loop through all the files (either with a loop or with a function), check which files should be excluded, if any, and save the pre-processed time-series. Tip: plot and visually inspect the data to figure out which should be excluded.
  • Run crqa on all the pre-processed time-series and save the output (don’t forget to add columns with study, group, condition and trial). Tip: remember to first assess optimal parameters (dimensions, delay, radius) across all timeseries. Tip: it will often fail, just take whatever parameters you get, select optimal across timeseries parameters and run crqa on all timeseries with those. Tip: double check the rr. When I ran the loop, I got very low rr, so I adjusted the radius until the average of rr across all pairs was approx. 4%.
# To create a filelist
filelist = list.files(path = "Data", pattern = ".csv")
# To create a function that can preprocess the data
preprocessing = function(data) {
  
  data = data %>% group(n = 100, method = 'greedy') %>%   dplyr::summarise(time = mean(time,na.rm=T), HR1 = mean(HR1,na.rm=T), HR2 = mean(HR2,na.rm=T), Resp1 = mean(Resp1,na.rm=T), Resp2 = mean(Resp2,na.rm=T))
  
  data$HR1=removeOuts(data$HR1,threshold)
  data$HR2=removeOuts(data$HR2,threshold)
  data$Resp1=removeOuts(data$Resp1,threshold)
  data$Resp2=removeOuts(data$Resp2,threshold)
  
  data$Resp1=scale(data$Resp1)
  data$Resp2=scale(data$Resp2)  
  data$HR1=scale(data$HR1)
  data$HR2=scale(data$HR2)
  
  return(data)
}
# To create a loop to preproces all the data and create plots
Final_data = data.frame()
n=1
for (file in filelist) {
  data=read_csv(paste0("Data/",file))
  
  Datafile=preprocessing(data)
  
  Datafile$filename = filelist[n]
  
  ans_Resp = try(optimizeParam(Datafile$Resp1, Datafile$Resp2, par, min.rec = 2, max.rec = 8))
  ans_HR = try(optimizeParam(Datafile$HR1, Datafile$HR2, par, min.rec = 2, max.rec = 8))
  
  if (length(ans_Resp) > 1) {
  
Datafile$Dimension_Resp = ans_Resp$emddim
Datafile$Radius_Resp = ans_Resp$radius
Datafile$Delay_Resp = ans_Resp$delay
  } 
  
  else {
    
Datafile$Dimension_Resp = NA
Datafile$Radius_Resp = NA
Datafile$Delay_Resp = NA
    
  }
if (length(ans_HR) > 1) {
  
Datafile$Dimension_HR = ans_HR$emddim
Datafile$Radius_HR = ans_HR$radius
Datafile$Delay_HR = ans_HR$delay
  } 
  
  else {
    
Datafile$Dimension_HR = NA
Datafile$Radius_HR = NA
Datafile$Delay_HR = NA
    
  }
  
  Final_data = rbind(Final_data, Datafile)
  
  Resp_plot= ggplot(Datafile, aes(x=time, y= Resp1)) + geom_line(color = "red") + geom_line(aes(x=time, y=Resp2), color = "blue")
  
  HR_plot = ggplot(Datafile, aes(x=time, y= HR1)) + geom_line(color = "purple") + geom_line(aes(x=time, y=HR2), color = "chartreuse4")
  
  final_plot=gridExtra::grid.arrange(Resp_plot, HR_plot)
  
  ggsave(paste0(file, ".png"), plot = final_plot, path = "Plot")
  
  n=n+1
} 
Parsed with column specification:
cols(
  time = col_double(),
  Resp1 = col_integer(),
  Resp2 = col_double(),
  ECG1 = col_double(),
  ECG2 = col_double(),
  HR1 = col_double(),
  HR2 = col_double()
)
number of columns of result is not a multiple of vector length (arg 1)31102 parsing failures.
row # A tibble: 5 x 5 col     row   col               expected actual                                file expected   <int> <chr>                  <chr>  <chr>                               <chr> actual 1  8110 Resp1 no trailing characters .99939 'Data/Study1_G1_T1_Synchronous.csv' file 2  8112 Resp1 no trailing characters .99939 'Data/Study1_G1_T1_Synchronous.csv' row 3  8113 Resp1 no trailing characters .99512 'Data/Study1_G1_T1_Synchronous.csv' col 4  8114 Resp1 no trailing characters .99207 'Data/Study1_G1_T1_Synchronous.csv' expected 5  8115 Resp1 no trailing characters .99237 'Data/Study1_G1_T1_Synchronous.csv'
... ................. ... ............................................................................... ........ ............................................................................... ...... ............................................................................... .... ............................................................................... ... ............................................................................... ... ............................................................................... ........ ...............................................................................
See problems(...) for more details.
Error : NA/NaN/Inf in foreign function call (arg 1)
Error : NA/NaN/Inf in foreign function call (arg 1)
Error : NA/NaN/Inf in foreign function call (arg 1)

|================                                                                      |  18%    2 MB
|================                                                                      |  19%    2 MB
|=================                                                                     |  20%    2 MB
|==================                                                                    |  20%    2 MB
|==================                                                                    |  21%    2 MB
|===================                                                                   |  22%    2 MB
|===================                                                                   |  22%    2 MB
|====================                                                                  |  23%    2 MB
|====================                                                                  |  24%    3 MB
|=====================                                                                 |  24%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  25%    3 MB
|=======================                                                               |  26%    3 MB
|=======================                                                               |  27%    3 MB
|========================                                                              |  27%    3 MB
|========================                                                              |  28%    3 MB
|=========================                                                             |  29%    3 MB
|=========================                                                             |  29%    3 MB
|==========================                                                            |  30%    3 MB
|===========================                                                           |  31%    3 MB
|===========================                                                           |  31%    4 MB
|============================                                                          |  32%    4 MB
|============================                                                          |  33%    4 MB
|=============================                                                         |  33%    4 MB
|=============================                                                         |  34%    4 MB
|==============================                                                        |  35%    4 MB
|===============================                                                       |  35%    4 MB
|===============================                                                       |  36%    4 MB
|================================                                                      |  37%    4 MB
|================================                                                      |  37%    4 MB
|=================================                                                     |  38%    4 MB
|=================================                                                     |  38%    4 MB
|==================================                                                    |  39%    5 MB
|===================================                                                   |  40%    5 MB
|===================================                                                   |  40%    5 MB
|====================================                                                  |  41%    5 MB
|====================================                                                  |  42%    5 MB
|=====================================                                                 |  42%    5 MB
|=====================================                                                 |  43%    5 MB
|======================================                                                |  44%    5 MB
|======================================                                                |  44%    5 MB
|=======================================                                               |  45%    5 MB
|========================================                                              |  46%    5 MB
|========================================                                              |  46%    5 MB
|=========================================                                             |  47%    6 MB
|=========================================                                             |  48%    6 MB
|==========================================                                            |  48%    6 MB
|==========================================                                            |  49%    6 MB
|===========================================                                           |  50%    6 MB
|============================================                                          |  50%    6 MB
|============================================                                          |  51%    6 MB
|=============================================                                         |  52%    6 MB
|=============================================                                         |  52%    6 MB
|==============================================                                        |  53%    6 MB
|==============================================                                        |  54%    6 MB
|===============================================                                       |  54%    6 MB
|================================================                                      |  55%    7 MB
|================================================                                      |  55%    7 MB
|=================================================                                     |  56%    7 MB
|=================================================                                     |  57%    7 MB
|==================================================                                    |  57%    7 MB
|==================================================                                    |  58%    7 MB
|===================================================                                   |  59%    7 MB
|====================================================                                  |  59%    7 MB
|====================================================                                  |  60%    7 MB
|=====================================================                                 |  61%    7 MB
|=====================================================                                 |  61%    7 MB
|======================================================                                |  62%    7 MB
|======================================================                                |  62%    8 MB
|=======================================================                               |  63%    8 MB
|=======================================================                               |  64%    8 MB
|========================================================                              |  64%    8 MB
|=========================================================                             |  65%    8 MB
|=========================================================                             |  66%    8 MB
|==========================================================                            |  66%    8 MB
|==========================================================                            |  67%    8 MB
|===========================================================                           |  68%    8 MB
|===========================================================                           |  68%    8 MB
|============================================================                          |  69%    8 MB
|=============================================================                         |  70%    8 MB
|=============================================================                         |  70%    9 MB
|==============================================================                        |  71%    9 MB
|==============================================================                        |  72%    9 MB
|===============================================================                       |  72%    9 MB
|===============================================================                       |  73%    9 MB
|================================================================                      |  74%    9 MB
|=================================================================                     |  74%    9 MB
|=================================================================                     |  75%    9 MB
|==================================================================                    |  75%    9 MB
|==================================================================                    |  76%    9 MB
|===================================================================                   |  77%    9 MB
|===================================================================                   |  77%    9 MB
|====================================================================                  |  78%   10 MB
|====================================================================                  |  79%   10 MB
|=====================================================================                 |  79%   10 MB
|======================================================================                |  80%   10 MB
|======================================================================                |  81%   10 MB
|=======================================================================               |  81%   10 MB
|=======================================================================               |  82%   10 MB
|========================================================================              |  83%   10 MB
|========================================================================              |  83%   10 MB
|=========================================================================             |  84%   10 MB
|==========================================================================            |  85%   10 MB
|==========================================================================            |  85%   10 MB
|===========================================================================           |  86%   11 MB
|===========================================================================           |  87%   11 MB
|============================================================================          |  87%   11 MB
|============================================================================          |  88%   11 MB
|=============================================================================         |  89%   11 MB
|==============================================================================        |  89%   11 MB
|==============================================================================        |  90%   11 MB
|===============================================================================       |  91%   11 MB
|===============================================================================       |  91%   11 MB
|================================================================================      |  92%   11 MB
|================================================================================      |  92%   11 MB
|=================================================================================     |  93%   11 MB
|==================================================================================    |  94%   12 MB
|==================================================================================    |  94%   12 MB
|===================================================================================   |  95%   12 MB
|===================================================================================   |  96%   12 MB
|====================================================================================  |  96%   12 MB
|====================================================================================  |  97%   12 MB
|===================================================================================== |  98%   12 MB
|======================================================================================|  98%   12 MB
|======================================================================================|  99%   12 MB
|=======================================================================================| 100%   12 MB

|====                                                                                          |   5%
|=====                                                                                         |   5%
|======                                                                                        |   6%
|======                                                                                        |   7%
|=======                                                                                       |   7%
|========                                                                                      |   8%
|========                                                                              |   9%    1 MB
|========                                                                              |  10%    1 MB
|=========                                                                             |  10%    1 MB
|==========                                                                            |  11%    1 MB
|==========                                                                            |  12%    1 MB
|===========                                                                           |  13%    1 MB
|============                                                                          |  13%    1 MB
|============                                                                          |  14%    1 MB
|=============                                                                         |  15%    1 MB
|==============                                                                        |  16%    1 MB
|==============                                                                        |  16%    1 MB
|===============                                                                       |  17%    1 MB
|================                                                                      |  18%    2 MB
|================                                                                      |  19%    2 MB
|=================                                                                     |  19%    2 MB
|=================                                                                     |  20%    2 MB
|==================                                                                    |  21%    2 MB
|===================                                                                   |  22%    2 MB
|===================                                                                   |  22%    2 MB
|====================                                                                  |  23%    2 MB
|=====================                                                                 |  24%    2 MB
|=====================                                                                 |  24%    2 MB
|======================                                                                |  25%    2 MB
|=======================                                                               |  26%    2 MB
|=======================                                                               |  27%    3 MB
|========================                                                              |  27%    3 MB
|========================                                                              |  28%    3 MB
|=========================                                                             |  29%    3 MB
|==========================                                                            |  30%    3 MB
|==========================                                                            |  30%    3 MB
|===========================                                                           |  31%    3 MB
|============================                                                          |  32%    3 MB
|============================                                                          |  33%    3 MB
|=============================                                                         |  33%    3 MB
|==============================                                                        |  34%    3 MB
|==============================                                                        |  35%    3 MB
|===============================                                                       |  36%    4 MB
|================================                                                      |  36%    4 MB
|================================                                                      |  37%    4 MB
|=================================                                                     |  38%    4 MB
|=================================                                                     |  39%    4 MB
|==================================                                                    |  39%    4 MB
|===================================                                                   |  40%    4 MB
|===================================                                                   |  41%    4 MB
|====================================                                                  |  42%    4 MB
|=====================================                                                 |  42%    4 MB
|=====================================                                                 |  43%    4 MB
|======================================                                                |  44%    4 MB
|=======================================                                               |  45%    5 MB
|=======================================                                               |  45%    5 MB
|========================================                                              |  46%    5 MB
|=========================================                                             |  47%    5 MB
|=========================================                                             |  48%    5 MB
|==========================================                                            |  48%    5 MB
|===========================================                                           |  49%    5 MB
|===========================================                                           |  50%    5 MB
|============================================                                          |  51%    5 MB
|=============================================                                         |  51%    5 MB
|=============================================                                         |  52%    5 MB
|==============================================                                        |  53%    5 MB
|==============================================                                        |  53%    6 MB
|===============================================                                       |  54%    6 MB
|================================================                                      |  55%    6 MB
|================================================                                      |  56%    6 MB
|=================================================                                     |  56%    6 MB
|==================================================                                    |  57%    6 MB
|==================================================                                    |  58%    6 MB
|===================================================                                   |  59%    6 MB
|====================================================                                  |  59%    6 MB
|====================================================                                  |  60%    6 MB
|=====================================================                                 |  61%    6 MB
|======================================================                                |  62%    6 MB
|======================================================                                |  62%    7 MB
|=======================================================                               |  63%    7 MB
|=======================================================                               |  64%    7 MB
|========================================================                              |  65%    7 MB
|=========================================================                             |  65%    7 MB
|=========================================================                             |  66%    7 MB
|==========================================================                            |  67%    7 MB
|===========================================================                           |  67%    7 MB
|===========================================================                           |  68%    7 MB
|============================================================                          |  69%    7 MB
|=============================================================                         |  70%    7 MB
|=============================================================                         |  70%    7 MB
|==============================================================                        |  71%    8 MB
|==============================================================                        |  72%    8 MB
|===============================================================                       |  73%    8 MB
|================================================================                      |  73%    8 MB
|================================================================                      |  74%    8 MB
|=================================================================                     |  75%    8 MB
|==================================================================                    |  75%    8 MB
|==================================================================                    |  76%    8 MB
|===================================================================                   |  77%    8 MB
|====================================================================                  |  78%    8 MB
|====================================================================                  |  79%    8 MB
|=====================================================================                 |  79%    8 MB
|======================================================================                |  80%    9 MB
|======================================================================                |  81%    9 MB
|=======================================================================               |  81%    9 MB
|=======================================================================               |  82%    9 MB
|========================================================================              |  83%    9 MB
|=========================================================================             |  84%    9 MB
|=========================================================================             |  84%    9 MB
|==========================================================================            |  85%    9 MB
|===========================================================================           |  86%    9 MB
|===========================================================================           |  87%    9 MB
|============================================================================          |  87%    9 MB
|============================================================================          |  88%    9 MB
|=============================================================================         |  89%    9 MB
|==============================================================================        |  89%   10 MB
|==============================================================================        |  90%   10 MB
|===============================================================================       |  91%   10 MB
|================================================================================      |  92%   10 MB
|================================================================================      |  92%   10 MB
|=================================================================================     |  93%   10 MB
|==================================================================================    |  94%   10 MB
|==================================================================================    |  95%   10 MB
|===================================================================================   |  95%   10 MB
|===================================================================================   |  96%   10 MB
|====================================================================================  |  97%   10 MB
|===================================================================================== |  98%   10 MB
|===================================================================================== |  98%   11 MB
|======================================================================================|  99%   11 MB
|=======================================================================================| 100%   11 MB

|========                                                                              |   9%    1 MB
|========                                                                              |  10%    1 MB
|=========                                                                             |  10%    1 MB
|=========                                                                             |  10%    1 MB
|=========                                                                             |  11%    1 MB
|==========                                                                            |  11%    1 MB
|==========                                                                            |  12%    1 MB
|===========                                                                           |  12%    1 MB
|===========                                                                           |  13%    1 MB
|===========                                                                           |  13%    2 MB
|============                                                                          |  14%    2 MB
|============                                                                          |  14%    2 MB
|=============                                                                         |  15%    2 MB
|=============                                                                         |  15%    2 MB
|=============                                                                         |  16%    2 MB
|==============                                                                        |  16%    2 MB
|==============                                                                        |  16%    2 MB
|===============                                                                       |  17%    2 MB
|===============                                                                       |  17%    2 MB
|===============                                                                       |  18%    2 MB
|================                                                                      |  18%    2 MB
|================                                                                      |  19%    2 MB
|=================                                                                     |  19%    2 MB
|=================                                                                     |  20%    2 MB
|=================                                                                     |  20%    3 MB
|==================                                                                    |  21%    3 MB
|==================                                                                    |  21%    3 MB
|===================                                                                   |  21%    3 MB
|===================                                                                   |  22%    3 MB
|===================                                                                   |  22%    3 MB
|====================                                                                  |  23%    3 MB
|====================                                                                  |  23%    3 MB
|=====================                                                                 |  24%    3 MB
|=====================                                                                 |  24%    3 MB
|=====================                                                                 |  25%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  26%    3 MB
|=======================                                                               |  26%    3 MB
|=======================                                                               |  27%    4 MB
|=======================                                                               |  27%    4 MB
|========================                                                              |  27%    4 MB
|========================                                                              |  28%    4 MB
|=========================                                                             |  28%    4 MB
|=========================                                                             |  29%    4 MB
|=========================                                                             |  29%    4 MB
|==========================                                                            |  30%    4 MB
|==========================                                                            |  30%    4 MB
|===========================                                                           |  31%    4 MB
|===========================                                                           |  31%    4 MB
|===========================                                                           |  32%    4 MB
|============================                                                          |  32%    4 MB
|============================                                                          |  33%    4 MB
|=============================                                                         |  33%    4 MB
|=============================                                                         |  33%    5 MB
|=============================                                                         |  34%    5 MB
|==============================                                                        |  34%    5 MB
|==============================                                                        |  35%    5 MB
|===============================                                                       |  35%    5 MB
|===============================                                                       |  36%    5 MB
|===============================                                                       |  36%    5 MB
|================================                                                      |  37%    5 MB
|================================                                                      |  37%    5 MB
|=================================                                                     |  38%    5 MB
|=================================                                                     |  38%    5 MB
|=================================                                                     |  39%    5 MB
|==================================                                                    |  39%    5 MB
|==================================                                                    |  39%    5 MB
|===================================                                                   |  40%    5 MB
|===================================                                                   |  40%    6 MB
|===================================                                                   |  41%    6 MB
|====================================                                                  |  41%    6 MB
|====================================                                                  |  42%    6 MB
|=====================================                                                 |  42%    6 MB
|=====================================                                                 |  43%    6 MB
|=====================================                                                 |  43%    6 MB
|======================================                                                |  44%    6 MB
|======================================                                                |  44%    6 MB
|=======================================                                               |  44%    6 MB
|=======================================                                               |  45%    6 MB
|=======================================                                               |  45%    6 MB
|========================================                                              |  46%    6 MB
|========================================                                              |  46%    6 MB
|=========================================                                             |  47%    7 MB
|=========================================                                             |  47%    7 MB
|=========================================                                             |  48%    7 MB
|==========================================                                            |  48%    7 MB
|==========================================                                            |  49%    7 MB
|===========================================                                           |  49%    7 MB
|===========================================                                           |  50%    7 MB
|===========================================                                           |  50%    7 MB
|============================================                                          |  51%    7 MB
|============================================                                          |  51%    7 MB
|=============================================                                         |  51%    7 MB
|=============================================                                         |  52%    7 MB
|==============================================                                        |  52%    7 MB
|==============================================                                        |  53%    7 MB
|==============================================                                        |  53%    7 MB
|===============================================                                       |  54%    8 MB
|===============================================                                       |  54%    8 MB
|================================================                                      |  55%    8 MB
|================================================                                      |  55%    8 MB
|================================================                                      |  56%    8 MB
|=================================================                                     |  56%    8 MB
|=================================================                                     |  57%    8 MB
|==================================================                                    |  57%    8 MB
|==================================================                                    |  58%    8 MB
|==================================================                                    |  58%    8 MB
|===================================================                                   |  58%    8 MB
|===================================================                                   |  59%    8 MB
|====================================================                                  |  59%    8 MB
|====================================================                                  |  60%    8 MB
|====================================================                                  |  60%    9 MB
|=====================================================                                 |  61%    9 MB
|=====================================================                                 |  61%    9 MB
|======================================================                                |  62%    9 MB
|======================================================                                |  62%    9 MB
|======================================================                                |  63%    9 MB
|=======================================================                               |  63%    9 MB
|=======================================================                               |  64%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  65%    9 MB
|=========================================================                             |  65%    9 MB
|=========================================================                             |  66%    9 MB
|==========================================================                            |  66%    9 MB
|==========================================================                            |  67%    9 MB
|==========================================================                            |  67%   10 MB
|===========================================================                           |  68%   10 MB
|===========================================================                           |  68%   10 MB
|============================================================                          |  69%   10 MB
|============================================================                          |  69%   10 MB
|=============================================================                         |  70%   10 MB
|=============================================================                         |  70%   10 MB
|=============================================================                         |  71%   10 MB
|==============================================================                        |  71%   10 MB
|==============================================================                        |  71%   10 MB
|===============================================================                       |  72%   10 MB
|===============================================================                       |  72%   10 MB
|===============================================================                       |  73%   10 MB
|================================================================                      |  73%   10 MB
|================================================================                      |  74%   11 MB
|=================================================================                     |  74%   11 MB
|=================================================================                     |  75%   11 MB
|=================================================================                     |  75%   11 MB
|==================================================================                    |  76%   11 MB
|==================================================================                    |  76%   11 MB
|===================================================================                   |  77%   11 MB
|===================================================================                   |  77%   11 MB
|===================================================================                   |  78%   11 MB
|====================================================================                  |  78%   11 MB
|====================================================================                  |  79%   11 MB
|=====================================================================                 |  79%   11 MB
|=====================================================================                 |  79%   11 MB
|=====================================================================                 |  80%   11 MB
|======================================================================                |  80%   11 MB
|======================================================================                |  81%   12 MB
|=======================================================================               |  81%   12 MB
|=======================================================================               |  82%   12 MB
|========================================================================              |  82%   12 MB
|========================================================================              |  83%   12 MB
|========================================================================              |  83%   12 MB
|=========================================================================             |  84%   12 MB
|=========================================================================             |  84%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  86%   12 MB
|===========================================================================           |  86%   12 MB
|===========================================================================           |  87%   12 MB
|============================================================================          |  87%   12 MB
|============================================================================          |  87%   13 MB
|============================================================================          |  88%   13 MB
|=============================================================================         |  88%   13 MB
|=============================================================================         |  89%   13 MB
|==============================================================================        |  89%   13 MB
|==============================================================================        |  90%   13 MB
|==============================================================================        |  90%   13 MB
|===============================================================================       |  91%   13 MB
|===============================================================================       |  91%   13 MB
|================================================================================      |  92%   13 MB
|================================================================================      |  92%   13 MB
|================================================================================      |  93%   13 MB
|=================================================================================     |  93%   13 MB
|=================================================================================     |  93%   13 MB
|==================================================================================    |  94%   14 MB
|==================================================================================    |  94%   14 MB
|==================================================================================    |  95%   14 MB
|===================================================================================   |  95%   14 MB
|===================================================================================   |  96%   14 MB
|====================================================================================  |  96%   14 MB
|====================================================================================  |  97%   14 MB
|===================================================================================== |  97%   14 MB
|===================================================================================== |  98%   14 MB
|===================================================================================== |  98%   14 MB
|======================================================================================|  99%   14 MB
|======================================================================================|  99%   14 MB
|======================================================================================|  99%   14 MB
|=======================================================================================| 100%   14 MB

|===============                                                                       |  18%    2 MB
|================                                                                      |  18%    2 MB
|================                                                                      |  18%    2 MB
|================                                                                      |  19%    2 MB
|=================                                                                     |  19%    2 MB
|=================                                                                     |  20%    2 MB
|==================                                                                    |  20%    2 MB
|==================                                                                    |  21%    3 MB
|==================                                                                    |  21%    3 MB
|===================                                                                   |  22%    3 MB
|===================                                                                   |  22%    3 MB
|====================                                                                  |  23%    3 MB
|====================                                                                  |  23%    3 MB
|====================                                                                  |  24%    3 MB
|=====================                                                                 |  24%    3 MB
|=====================                                                                 |  24%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  26%    3 MB
|=======================                                                               |  26%    3 MB
|=======================                                                               |  27%    3 MB
|========================                                                              |  27%    3 MB
|========================                                                              |  28%    4 MB
|========================                                                              |  28%    4 MB
|=========================                                                             |  29%    4 MB
|=========================                                                             |  29%    4 MB
|==========================                                                            |  29%    4 MB
|==========================                                                            |  30%    4 MB
|==========================                                                            |  30%    4 MB
|===========================                                                           |  31%    4 MB
|===========================                                                           |  31%    4 MB
|============================                                                          |  32%    4 MB
|============================                                                          |  32%    4 MB
|============================                                                          |  33%    4 MB
|=============================                                                         |  33%    4 MB
|=============================                                                         |  34%    4 MB
|==============================                                                        |  34%    4 MB
|==============================                                                        |  35%    5 MB
|==============================                                                        |  35%    5 MB
|===============================                                                       |  36%    5 MB
|===============================                                                       |  36%    5 MB
|================================                                                      |  36%    5 MB
|================================                                                      |  37%    5 MB
|================================                                                      |  37%    5 MB
|=================================                                                     |  38%    5 MB
|=================================                                                     |  38%    5 MB
|==================================                                                    |  39%    5 MB
|==================================                                                    |  39%    5 MB
|==================================                                                    |  40%    5 MB
|===================================                                                   |  40%    5 MB
|===================================                                                   |  41%    5 MB
|====================================                                                  |  41%    5 MB
|====================================                                                  |  42%    6 MB
|====================================                                                  |  42%    6 MB
|=====================================                                                 |  42%    6 MB
|=====================================                                                 |  43%    6 MB
|======================================                                                |  43%    6 MB
|======================================                                                |  44%    6 MB
|======================================                                                |  44%    6 MB
|=======================================                                               |  45%    6 MB
|=======================================                                               |  45%    6 MB
|========================================                                              |  46%    6 MB
|========================================                                              |  46%    6 MB
|========================================                                              |  47%    6 MB
|=========================================                                             |  47%    6 MB
|=========================================                                             |  48%    6 MB
|==========================================                                            |  48%    6 MB
|==========================================                                            |  48%    7 MB
|===========================================                                           |  49%    7 MB
|===========================================                                           |  49%    7 MB
|===========================================                                           |  50%    7 MB
|============================================                                          |  50%    7 MB
|============================================                                          |  51%    7 MB
|=============================================                                         |  51%    7 MB
|=============================================                                         |  52%    7 MB
|=============================================                                         |  52%    7 MB
|==============================================                                        |  53%    7 MB
|==============================================                                        |  53%    7 MB
|===============================================                                       |  54%    7 MB
|===============================================                                       |  54%    7 MB
|===============================================                                       |  55%    7 MB
|================================================                                      |  55%    7 MB
|================================================                                      |  56%    8 MB
|=================================================                                     |  56%    8 MB
|=================================================                                     |  56%    8 MB
|=================================================                                     |  57%    8 MB
|==================================================                                    |  57%    8 MB
|==================================================                                    |  58%    8 MB
|===================================================                                   |  58%    8 MB
|===================================================                                   |  59%    8 MB
|====================================================                                  |  59%    8 MB
|====================================================                                  |  60%    8 MB
|====================================================                                  |  60%    8 MB
|=====================================================                                 |  61%    8 MB
|=====================================================                                 |  61%    8 MB
|======================================================                                |  62%    8 MB
|======================================================                                |  62%    8 MB
|======================================================                                |  63%    9 MB
|=======================================================                               |  63%    9 MB
|=======================================================                               |  63%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  65%    9 MB
|=========================================================                             |  65%    9 MB
|=========================================================                             |  66%    9 MB
|==========================================================                            |  66%    9 MB
|==========================================================                            |  67%    9 MB
|==========================================================                            |  67%    9 MB
|===========================================================                           |  68%    9 MB
|===========================================================                           |  68%    9 MB
|============================================================                          |  69%    9 MB
|============================================================                          |  69%    9 MB
|============================================================                          |  69%   10 MB
|=============================================================                         |  70%   10 MB
|=============================================================                         |  70%   10 MB
|==============================================================                        |  71%   10 MB
|==============================================================                        |  71%   10 MB
|==============================================================                        |  72%   10 MB
|===============================================================                       |  72%   10 MB
|===============================================================                       |  73%   10 MB
|================================================================                      |  73%   10 MB
|================================================================                      |  74%   10 MB
|================================================================                      |  74%   10 MB
|=================================================================                     |  74%   10 MB
|=================================================================                     |  75%   10 MB
|==================================================================                    |  75%   10 MB
|==================================================================                    |  76%   10 MB
|==================================================================                    |  76%   11 MB
|===================================================================                   |  77%   11 MB
|===================================================================                   |  77%   11 MB
|====================================================================                  |  78%   11 MB
|====================================================================                  |  78%   11 MB
|====================================================================                  |  79%   11 MB
|=====================================================================                 |  79%   11 MB
|=====================================================================                 |  80%   11 MB
|======================================================================                |  80%   11 MB
|======================================================================                |  81%   11 MB
|======================================================================                |  81%   11 MB
|=======================================================================               |  81%   11 MB
|=======================================================================               |  82%   11 MB
|========================================================================              |  82%   11 MB
|========================================================================              |  83%   11 MB
|========================================================================              |  83%   12 MB
|=========================================================================             |  84%   12 MB
|=========================================================================             |  84%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  86%   12 MB
|===========================================================================           |  86%   12 MB
|===========================================================================           |  86%   12 MB
|============================================================================          |  87%   12 MB
|============================================================================          |  87%   12 MB
|============================================================================          |  88%   12 MB
|=============================================================================         |  88%   12 MB
|=============================================================================         |  89%   12 MB
|==============================================================================        |  89%   12 MB
|==============================================================================        |  90%   12 MB
|==============================================================================        |  90%   13 MB
|===============================================================================       |  91%   13 MB
|===============================================================================       |  91%   13 MB
|================================================================================      |  92%   13 MB
|================================================================================      |  92%   13 MB
|================================================================================      |  93%   13 MB
|=================================================================================     |  93%   13 MB
|=================================================================================     |  93%   13 MB
|==================================================================================    |  94%   13 MB
|==================================================================================    |  94%   13 MB
|==================================================================================    |  95%   13 MB
|===================================================================================   |  95%   13 MB
|===================================================================================   |  96%   13 MB
|====================================================================================  |  96%   13 MB
|====================================================================================  |  97%   13 MB
|====================================================================================  |  97%   14 MB
|===================================================================================== |  98%   14 MB
|===================================================================================== |  98%   14 MB
|======================================================================================|  99%   14 MB
|======================================================================================|  99%   14 MB
|======================================================================================|  99%   14 MB
|=======================================================================================| 100%   14 MB

|==============                                                                        |  17%    2 MB
|===============                                                                       |  17%    2 MB
|===============                                                                       |  17%    2 MB
|================                                                                      |  18%    2 MB
|================                                                                      |  18%    2 MB
|================                                                                      |  19%    2 MB
|=================                                                                     |  19%    2 MB
|=================                                                                     |  20%    2 MB
|==================                                                                    |  20%    3 MB
|==================                                                                    |  21%    3 MB
|==================                                                                    |  21%    3 MB
|===================                                                                   |  22%    3 MB
|===================                                                                   |  22%    3 MB
|====================                                                                  |  23%    3 MB
|====================                                                                  |  23%    3 MB
|====================                                                                  |  24%    3 MB
|=====================                                                                 |  24%    3 MB
|=====================                                                                 |  24%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  26%    3 MB
|=======================                                                               |  26%    3 MB
|=======================                                                               |  27%    4 MB
|========================                                                              |  27%    4 MB
|========================                                                              |  28%    4 MB
|========================                                                              |  28%    4 MB
|=========================                                                             |  29%    4 MB
|=========================                                                             |  29%    4 MB
|==========================                                                            |  30%    4 MB
|==========================                                                            |  30%    4 MB
|==========================                                                            |  31%    4 MB
|===========================                                                           |  31%    4 MB
|===========================                                                           |  31%    4 MB
|============================                                                          |  32%    4 MB
|============================                                                          |  32%    4 MB
|=============================                                                         |  33%    4 MB
|=============================                                                         |  33%    4 MB
|=============================                                                         |  34%    5 MB
|==============================                                                        |  34%    5 MB
|==============================                                                        |  35%    5 MB
|===============================                                                       |  35%    5 MB
|===============================                                                       |  36%    5 MB
|===============================                                                       |  36%    5 MB
|================================                                                      |  37%    5 MB
|================================                                                      |  37%    5 MB
|=================================                                                     |  38%    5 MB
|=================================                                                     |  38%    5 MB
|=================================                                                     |  38%    5 MB
|==================================                                                    |  39%    5 MB
|==================================                                                    |  39%    5 MB
|===================================                                                   |  40%    5 MB
|===================================                                                   |  40%    5 MB
|===================================                                                   |  41%    6 MB
|====================================                                                  |  41%    6 MB
|====================================                                                  |  42%    6 MB
|=====================================                                                 |  42%    6 MB
|=====================================                                                 |  43%    6 MB
|=====================================                                                 |  43%    6 MB
|======================================                                                |  44%    6 MB
|======================================                                                |  44%    6 MB
|=======================================                                               |  44%    6 MB
|=======================================                                               |  45%    6 MB
|=======================================                                               |  45%    6 MB
|========================================                                              |  46%    6 MB
|========================================                                              |  46%    6 MB
|=========================================                                             |  47%    6 MB
|=========================================                                             |  47%    7 MB
|=========================================                                             |  48%    7 MB
|==========================================                                            |  48%    7 MB
|==========================================                                            |  49%    7 MB
|===========================================                                           |  49%    7 MB
|===========================================                                           |  50%    7 MB
|===========================================                                           |  50%    7 MB
|============================================                                          |  50%    7 MB
|============================================                                          |  51%    7 MB
|=============================================                                         |  51%    7 MB
|=============================================                                         |  52%    7 MB
|=============================================                                         |  52%    7 MB
|==============================================                                        |  53%    7 MB
|==============================================                                        |  53%    7 MB
|===============================================                                       |  54%    7 MB
|===============================================                                       |  54%    8 MB
|===============================================                                       |  55%    8 MB
|================================================                                      |  55%    8 MB
|================================================                                      |  56%    8 MB
|=================================================                                     |  56%    8 MB
|=================================================                                     |  57%    8 MB
|==================================================                                    |  57%    8 MB
|==================================================                                    |  57%    8 MB
|==================================================                                    |  58%    8 MB
|===================================================                                   |  58%    8 MB
|===================================================                                   |  59%    8 MB
|====================================================                                  |  59%    8 MB
|====================================================                                  |  60%    8 MB
|====================================================                                  |  60%    8 MB
|=====================================================                                 |  61%    8 MB
|=====================================================                                 |  61%    9 MB
|======================================================                                |  62%    9 MB
|======================================================                                |  62%    9 MB
|======================================================                                |  63%    9 MB
|=======================================================                               |  63%    9 MB
|=======================================================                               |  63%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  65%    9 MB
|=========================================================                             |  65%    9 MB
|=========================================================                             |  66%    9 MB
|==========================================================                            |  66%    9 MB
|==========================================================                            |  67%    9 MB
|==========================================================                            |  67%    9 MB
|===========================================================                           |  68%   10 MB
|===========================================================                           |  68%   10 MB
|============================================================                          |  69%   10 MB
|============================================================                          |  69%   10 MB
|============================================================                          |  70%   10 MB
|=============================================================                         |  70%   10 MB
|=============================================================                         |  70%   10 MB
|==============================================================                        |  71%   10 MB
|==============================================================                        |  71%   10 MB
|==============================================================                        |  72%   10 MB
|===============================================================                       |  72%   10 MB
|===============================================================                       |  73%   10 MB
|================================================================                      |  73%   10 MB
|================================================================                      |  74%   10 MB
|================================================================                      |  74%   10 MB
|=================================================================                     |  75%   11 MB
|=================================================================                     |  75%   11 MB
|==================================================================                    |  76%   11 MB
|==================================================================                    |  76%   11 MB
|==================================================================                    |  76%   11 MB
|===================================================================                   |  77%   11 MB
|===================================================================                   |  77%   11 MB
|====================================================================                  |  78%   11 MB
|====================================================================                  |  78%   11 MB
|====================================================================                  |  79%   11 MB
|=====================================================================                 |  79%   11 MB
|=====================================================================                 |  80%   11 MB
|======================================================================                |  80%   11 MB
|======================================================================                |  81%   11 MB
|======================================================================                |  81%   11 MB
|=======================================================================               |  82%   12 MB
|=======================================================================               |  82%   12 MB
|========================================================================              |  82%   12 MB
|========================================================================              |  83%   12 MB
|========================================================================              |  83%   12 MB
|=========================================================================             |  84%   12 MB
|=========================================================================             |  84%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  86%   12 MB
|===========================================================================           |  86%   12 MB
|===========================================================================           |  87%   12 MB
|============================================================================          |  87%   12 MB
|============================================================================          |  88%   12 MB
|============================================================================          |  88%   12 MB
|=============================================================================         |  88%   13 MB
|=============================================================================         |  89%   13 MB
|==============================================================================        |  89%   13 MB
|==============================================================================        |  90%   13 MB
|===============================================================================       |  90%   13 MB
|===============================================================================       |  91%   13 MB
|===============================================================================       |  91%   13 MB
|================================================================================      |  92%   13 MB
|================================================================================      |  92%   13 MB
|=================================================================================     |  93%   13 MB
|=================================================================================     |  93%   13 MB
|=================================================================================     |  94%   13 MB
|==================================================================================    |  94%   13 MB
|==================================================================================    |  94%   13 MB
|===================================================================================   |  95%   14 MB
|===================================================================================   |  95%   14 MB
|===================================================================================   |  96%   14 MB
|====================================================================================  |  96%   14 MB
|====================================================================================  |  97%   14 MB
|====================================================================================  |  97%   14 MB
|===================================================================================== |  98%   14 MB
|===================================================================================== |  98%   14 MB
|======================================================================================|  99%   14 MB
|======================================================================================|  99%   14 MB
|======================================================================================|  99%   14 MB
|=======================================================================================| 100%   14 MB
Error : NA/NaN/Inf in foreign function call (arg 1)
Error : NA/NaN/Inf in foreign function call (arg 1)

|==                                                                                            |   2%
|==                                                                                            |   2%
|===                                                                                           |   3%
|===                                                                                           |   3%
|===                                                                                           |   4%
|====                                                                                          |   4%
|====                                                                                          |   5%
|=====                                                                                         |   5%
|=====                                                                                         |   6%
|======                                                                                        |   6%
|======                                                                                |   6%    1 MB
|======                                                                                |   7%    1 MB
|======                                                                                |   7%    1 MB
|=======                                                                               |   8%    1 MB
|=======                                                                               |   8%    1 MB
|========                                                                              |   9%    1 MB
|========                                                                              |   9%    1 MB
|========                                                                              |  10%    1 MB
|=========                                                                             |  10%    1 MB
|=========                                                                             |  11%    1 MB
|==========                                                                            |  11%    1 MB
|==========                                                                            |  12%    1 MB
|==========                                                                            |  12%    1 MB
|===========                                                                           |  12%    1 MB
|===========                                                                           |  13%    2 MB
|============                                                                          |  13%    2 MB
|============                                                                          |  14%    2 MB
|============                                                                          |  14%    2 MB
|=============                                                                         |  15%    2 MB
|=============                                                                         |  15%    2 MB
|==============                                                                        |  16%    2 MB
|==============                                                                        |  16%    2 MB
|==============                                                                        |  17%    2 MB
|===============                                                                       |  17%    2 MB
|===============                                                                       |  18%    2 MB
|================                                                                      |  18%    2 MB
|================                                                                      |  19%    2 MB
|================                                                                      |  19%    2 MB
|=================                                                                     |  19%    3 MB
|=================                                                                     |  20%    3 MB
|==================                                                                    |  20%    3 MB
|==================                                                                    |  21%    3 MB
|==================                                                                    |  21%    3 MB
|===================                                                                   |  22%    3 MB
|===================                                                                   |  22%    3 MB
|====================                                                                  |  23%    3 MB
|====================                                                                  |  23%    3 MB
|====================                                                                  |  24%    3 MB
|=====================                                                                 |  24%    3 MB
|=====================                                                                 |  25%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  25%    3 MB
|======================                                                                |  26%    4 MB
|=======================                                                               |  26%    4 MB
|=======================                                                               |  27%    4 MB
|========================                                                              |  27%    4 MB
|========================                                                              |  28%    4 MB
|=========================                                                             |  28%    4 MB
|=========================                                                             |  29%    4 MB
|=========================                                                             |  29%    4 MB
|==========================                                                            |  30%    4 MB
|==========================                                                            |  30%    4 MB
|===========================                                                           |  31%    4 MB
|===========================                                                           |  31%    4 MB
|===========================                                                           |  32%    4 MB
|============================                                                          |  32%    4 MB
|============================                                                          |  32%    4 MB
|=============================                                                         |  33%    5 MB
|=============================                                                         |  33%    5 MB
|=============================                                                         |  34%    5 MB
|==============================                                                        |  34%    5 MB
|==============================                                                        |  35%    5 MB
|===============================                                                       |  35%    5 MB
|===============================                                                       |  36%    5 MB
|===============================                                                       |  36%    5 MB
|================================                                                      |  37%    5 MB
|================================                                                      |  37%    5 MB
|=================================                                                     |  38%    5 MB
|=================================                                                     |  38%    5 MB
|=================================                                                     |  38%    5 MB
|==================================                                                    |  39%    5 MB
|==================================                                                    |  39%    6 MB
|===================================                                                   |  40%    6 MB
|===================================                                                   |  40%    6 MB
|===================================                                                   |  41%    6 MB
|====================================                                                  |  41%    6 MB
|====================================                                                  |  42%    6 MB
|=====================================                                                 |  42%    6 MB
|=====================================                                                 |  43%    6 MB
|=====================================                                                 |  43%    6 MB
|======================================                                                |  44%    6 MB
|======================================                                                |  44%    6 MB
|=======================================                                               |  44%    6 MB
|=======================================                                               |  45%    6 MB
|=======================================                                               |  45%    6 MB
|========================================                                              |  46%    7 MB
|========================================                                              |  46%    7 MB
|=========================================                                             |  47%    7 MB
|=========================================                                             |  47%    7 MB
|=========================================                                             |  48%    7 MB
|==========================================                                            |  48%    7 MB
|==========================================                                            |  49%    7 MB
|===========================================                                           |  49%    7 MB
|===========================================                                           |  50%    7 MB
|===========================================                                           |  50%    7 MB
|============================================                                          |  51%    7 MB
|============================================                                          |  51%    7 MB
|=============================================                                         |  51%    7 MB
|=============================================                                         |  52%    7 MB
|==============================================                                        |  52%    8 MB
|==============================================                                        |  53%    8 MB
|==============================================                                        |  53%    8 MB
|===============================================                                       |  54%    8 MB
|===============================================                                       |  54%    8 MB
|================================================                                      |  55%    8 MB
|================================================                                      |  55%    8 MB
|================================================                                      |  56%    8 MB
|=================================================                                     |  56%    8 MB
|=================================================                                     |  57%    8 MB
|==================================================                                    |  57%    8 MB
|==================================================                                    |  57%    8 MB
|==================================================                                    |  58%    8 MB
|===================================================                                   |  58%    8 MB
|===================================================                                   |  59%    8 MB
|====================================================                                  |  59%    9 MB
|====================================================                                  |  60%    9 MB
|====================================================                                  |  60%    9 MB
|=====================================================                                 |  61%    9 MB
|=====================================================                                 |  61%    9 MB
|======================================================                                |  62%    9 MB
|======================================================                                |  62%    9 MB
|======================================================                                |  63%    9 MB
|=======================================================                               |  63%    9 MB
|=======================================================                               |  63%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  64%    9 MB
|========================================================                              |  65%    9 MB
|=========================================================                             |  65%    9 MB
|=========================================================                             |  66%   10 MB
|==========================================================                            |  66%   10 MB
|==========================================================                            |  67%   10 MB
|==========================================================                            |  67%   10 MB
|===========================================================                           |  68%   10 MB
|===========================================================                           |  68%   10 MB
|============================================================                          |  69%   10 MB
|============================================================                          |  69%   10 MB
|============================================================                          |  69%   10 MB
|=============================================================                         |  70%   10 MB
|=============================================================                         |  70%   10 MB
|==============================================================                        |  71%   10 MB
|==============================================================                        |  71%   10 MB
|==============================================================                        |  72%   10 MB
|===============================================================                       |  72%   11 MB
|===============================================================                       |  73%   11 MB
|================================================================                      |  73%   11 MB
|================================================================                      |  74%   11 MB
|================================================================                      |  74%   11 MB
|=================================================================                     |  75%   11 MB
|=================================================================                     |  75%   11 MB
|==================================================================                    |  75%   11 MB
|==================================================================                    |  76%   11 MB
|==================================================================                    |  76%   11 MB
|===================================================================                   |  77%   11 MB
|===================================================================                   |  77%   11 MB
|====================================================================                  |  78%   11 MB
|====================================================================                  |  78%   11 MB
|====================================================================                  |  79%   11 MB
|=====================================================================                 |  79%   12 MB
|=====================================================================                 |  80%   12 MB
|======================================================================                |  80%   12 MB
|======================================================================                |  81%   12 MB
|======================================================================                |  81%   12 MB
|=======================================================================               |  81%   12 MB
|=======================================================================               |  82%   12 MB
|========================================================================              |  82%   12 MB
|========================================================================              |  83%   12 MB
|========================================================================              |  83%   12 MB
|=========================================================================             |  84%   12 MB
|=========================================================================             |  84%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  85%   12 MB
|==========================================================================            |  86%   13 MB
|===========================================================================           |  86%   13 MB
|===========================================================================           |  87%   13 MB
|============================================================================          |  87%   13 MB
|============================================================================          |  87%   13 MB
|============================================================================          |  88%   13 MB
|=============================================================================         |  88%   13 MB
|=============================================================================         |  89%   13 MB
|==============================================================================        |  89%   13 MB
|==============================================================================        |  90%   13 MB
|==============================================================================        |  90%   13 MB
|===============================================================================       |  91%   13 MB
|===============================================================================       |  91%   13 MB
|================================================================================      |  92%   13 MB
|================================================================================      |  92%   14 MB
|================================================================================      |  93%   14 MB
|=================================================================================     |  93%   14 MB
|=================================================================================     |  93%   14 MB
|==================================================================================    |  94%   14 MB
|==================================================================================    |  94%   14 MB
|==================================================================================    |  95%   14 MB
|===================================================================================   |  95%   14 MB
|===================================================================================   |  96%   14 MB
|====================================================================================  |  96%   14 MB
|====================================================================================  |  97%   14 MB
|====================================================================================  |  97%   14 MB
|===================================================================================== |  98%   14 MB
|===================================================================================== |  98%   14 MB
|======================================================================================|  99%   14 MB
|======================================================================================|  99%   15 MB
|======================================================================================|  99%   15 MB
|=======================================================================================| 100%   15 MB

# Based on plots we choose to remove the following data:
  # Study1_G1_T1, Study1_G1_T2, Study1_G2_T1, Study1_G2_T2
Final_data=Final_data[Final_data$filename != "Study1_G1_T1_Synchronous.csv", ]
Final_data=Final_data[Final_data$filename != "Study1_G1_T2_TurnTaking.csv", ]
Final_data=Final_data[Final_data$filename != "Study1_G2_T1_TurnTaking.csv", ]
Final_data=Final_data[Final_data$filename != "Study1_G2_T2_Synchronous.csv", ]
# To get column with study number
for (file in 1:nrow(Final_data)){
  if (grepl("Study1", Final_data$filename[file])){
    Final_data$Study[file] = 1}
  if (grepl("Study2", Final_data$filename[file])){
    Final_data$Study[file] = 2}
}
Unknown or uninitialised column: 'Study'.
# To get group number
Final_data$Group=regmatches(Final_data$filename, regexpr("[G].*[0-9]", Final_data$filename))
Final_data$Group = gsub("[G, _, T]", "", Final_data$Group)
Final_data$Group=substr(Final_data$Group, 1, nchar(Final_data$Group)-1)
# To get trial number
Final_data$Trial=regmatches(Final_data$filename, regexpr("[T].*[0-9]", Final_data$filename))
Final_data$Trial = gsub("[T]", "", Final_data$Trial)
# To get condition
Final_data = Final_data %>% group_by(filename) %>% mutate(Condition = gsub('.{4}$', '', strsplit(filename, "_")[[1]][4]))
# To write data to a csv file
write.csv(Final_data, file = "Final_data.csv")
# To get mean parameters for CRQA
mean(Final_data$Dimension_Resp, na.rm = TRUE) # 3.20 = 3
[1] 3.197319
mean(Final_data$Radius_Resp, na.rm = TRUE) # 0.614
[1] 0.6142882
mean(Final_data$Delay_Resp, na.rm = TRUE) # 29.46 = 29
[1] 29.46358
mean(Final_data$Dimension_HR, na.rm = TRUE) # 11.95 = 12 
[1] 11.94974
mean(Final_data$Radius_HR, na.rm = TRUE) # 1.633
[1] 1.633311
mean(Final_data$Delay_HR, na.rm = TRUE) # 29.89 = 30
[1] 29.88559
# To create a function that can perform CRQA for each file
CRQA = function(data) {
  RespCRQA = crqa(data$Resp1, data$Resp2, delay = 29, embed = 3,
                   radius = 0.8, normalize = 0, rescale = 0,
                   mindiagline = 2, minvertline = 2)
  RespCRQA$RP = NULL  # Remove large matrix
  RespCRQA = as_tibble(RespCRQA) %>%
    mutate(type = 'Resp')
  
  HrCRQA = crqa(data$HR1, data$HR2, delay = 30, embed = 12,
                radius = 2.6, normalize = 0, rescale = 0,
                mindiagline = 2, minvertline = 2)
  HrCRQA$RP = NULL  # Remove large matrix
  HrCRQA = as_tibble(HrCRQA) %>%
    mutate(type = 'HR')
  
  return(rbind(RespCRQA, HrCRQA))
}
# To use the function 
crqa_results = Final_data %>%
  dplyr::select(-c(.groups)) %>%  # Remove .groups (not needed right?)
  dplyr::group_by(filename) %>%  # Group by each file
  dplyr::do(CRQA(.)) %>%  # Do CRQA on each group (file)
  dplyr::ungroup()  # Ungroup (prob. not needed, didn't check) 

|==                                                                          |  4% ~57 s remaining    
|=====                                                                       |  8% ~1 m remaining     
|========                                                                    | 12% ~1 m remaining     
|===========                                                                 | 15% ~1 m remaining     
|==============                                                              | 19% ~1 m remaining     
|=================                                                           | 23% ~1 m remaining     
|====================                                                        | 27% ~55 s remaining    
|=======================                                                     | 31% ~50 s remaining    
|==========================                                                  | 35% ~51 s remaining    
|=============================                                               | 38% ~51 s remaining    
|================================                                            | 42% ~49 s remaining    
|===================================                                         | 46% ~49 s remaining    
|======================================                                      | 50% ~47 s remaining    
|========================================                                    | 54% ~44 s remaining    
|===========================================                                 | 58% ~41 s remaining    
|==============================================                              | 62% ~38 s remaining    
|=================================================                           | 65% ~34 s remaining    
|====================================================                        | 69% ~31 s remaining    
|=======================================================                     | 73% ~27 s remaining    
|==========================================================                  | 77% ~24 s remaining    
|=============================================================               | 81% ~20 s remaining    
|================================================================            | 85% ~16 s remaining    
|===================================================================         | 88% ~12 s remaining    
|======================================================================      | 92% ~8 s remaining     
|=========================================================================   | 96% ~4 s remaining     
|============================================================================|100% ~0 s remaining     
Final_data2 = merge(Final_data, crqa_results, by = "filename")
# To write the data to a csv file
write.csv(Final_data2, file = "Final_data2.csv")

Creating controls: shuffled controls

  • loop through all pairs and conditions
  • shuffle the timeseries (take a timeseries and rearrange its values in a random order). Tip check the sample() function
  • run crqa and save the output. NB. which delay, embed, radius parameters should you use?
  • statistically compare the crqa indexes in real and shuffled pairs
# To create a file list
filelist2 = list.files(path = "PreprocessedData", pattern = ".csv")
# To loop through each file, shuffle the data and perform CRQA on the shuffled data
CRQA_shuffled = data.frame()
n=1
for (file in filelist2) {
  d=read_csv(paste0("PreprocessedData/",file))
  
  d$HR1 = sample(d$HR1)
  d$HR2 = sample(d$HR2)
  d$Resp1 = sample(d$Resp1)
  d$Resp2 = sample(d$Resp2)
  
  data=CRQA(d)
  
  data$filename = filelist2[n]
  
  CRQA_shuffled=rbind(data, CRQA_shuffled)
  
  n=n+1
  
}
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_integer(),
  Radius_HR = col_double(),
  Delay_HR = col_integer()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_integer(),
  Radius_HR = col_double(),
  Delay_HR = col_integer()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_integer(),
  Radius_HR = col_double(),
  Delay_HR = col_integer()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_integer(),
  Radius_HR = col_double(),
  Delay_HR = col_integer()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_character(),
  Radius_Resp = col_character(),
  Delay_Resp = col_character(),
  Dimension_HR = col_character(),
  Radius_HR = col_character(),
  Delay_HR = col_character()
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_integer(),
  .groups = col_integer(),
  time = col_double(),
  HR1 = col_double(),
  HR2 = col_double(),
  Resp1 = col_double(),
  Resp2 = col_double(),
  filename = col_character(),
  Dimension_Resp = col_integer(),
  Radius_Resp = col_double(),
  Delay_Resp = col_integer(),
  Dimension_HR = col_integer(),
  Radius_HR = col_double(),
  Delay_HR = col_integer()
)
# To remove last 4 characters in filename (replication of .csv)
CRQA_shuffled$filename = substr(CRQA_shuffled$filename,1,nchar(CRQA_shuffled$filename)-4)
# To specify type of CRQA
crqa_results$CRQA = "Normal"
CRQA_shuffled$CRQA = "Shuffled Control"
# To combine dataset
CRQA_data = rbind(crqa_results, CRQA_shuffled)
CRQA_Resp=subset(CRQA_data[CRQA_data$type == "Resp",])
CRQA_HR=subset(CRQA_data[CRQA_data$type == "HR",])
# Statistically compare relevant CRQA indexes in normal data and shuffled controls
m1=lm(L ~ CRQA, CRQA_HR)
summary(m1)

Call:
lm(formula = L ~ CRQA, data = CRQA_HR)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.7342 -0.7254 -0.0071  0.0160 12.3456 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)            6.9489     0.4933  14.088  < 2e-16 ***
CRQAShuffled Control  -4.9362     0.6976  -7.076 4.56e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.515 on 50 degrees of freedom
Multiple R-squared:  0.5004,    Adjusted R-squared:  0.4904 
F-statistic: 50.07 on 1 and 50 DF,  p-value: 4.562e-09
m2 = lm(L~ CRQA, CRQA_Resp)
summary(m2)

Call:
lm(formula = L ~ CRQA, data = CRQA_Resp)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.61101 -0.01296 -0.00243  0.02301  0.93517 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)           4.00521    0.06078   65.90   <2e-16 ***
CRQAShuffled Control -1.95728    0.08595  -22.77   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3099 on 50 degrees of freedom
Multiple R-squared:  0.9121,    Adjusted R-squared:  0.9103 
F-statistic: 518.6 on 1 and 50 DF,  p-value: < 2.2e-16
m3=lm(RR ~ CRQA, CRQA_HR)
summary(m3)

Call:
lm(formula = RR ~ CRQA, data = CRQA_HR)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4174 -1.4206 -0.5285  0.8121  9.9431 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)            3.8194     0.5205   7.338 1.78e-09 ***
CRQAShuffled Control  -2.3049     0.7361  -3.131  0.00291 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.654 on 50 degrees of freedom
Multiple R-squared:  0.1639,    Adjusted R-squared:  0.1472 
F-statistic: 9.804 on 1 and 50 DF,  p-value: 0.002907
m4 = lm(RR~ CRQA, CRQA_Resp)
summary(m4)

Call:
lm(formula = RR ~ CRQA, data = CRQA_Resp)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.7477 -0.5310 -0.1684  0.4924  2.2263 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)            4.9838     0.1582   31.51   <2e-16 ***
CRQAShuffled Control  -0.4116     0.2237   -1.84   0.0717 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8065 on 50 degrees of freedom
Multiple R-squared:  0.06343,   Adjusted R-squared:  0.0447 
F-statistic: 3.386 on 1 and 50 DF,  p-value: 0.07167
m5 = lm (ENTR ~ CRQA_HR)
Fejl i eval(expr, envir, enclos) : objekt 'ENTR' blev ikke fundet

TRICKY! Creating controls: surrogate pair controls

  • Per each real pair, identify at least one surrogate pair (matching one of the participants, with somebody doing the same task, but in a different pair). Tip: Celine will share a commented script
  • Run crqa on all the surrogate pairs and save the output. NB. which delay, embed, radius parameters should you use?
  • Test whether crqa shows a difference between real and surrogate pairs ### Testing effects of conditions
  • make a (probably underpowered) mixed model testing effects of the different conditions on heart rate and respiration coordination
  • N.B: would it make sense to include surrogate pairs? and if so how? what would that tell you?
summary(m6)

Call:
lm(formula = RR ~ CRQA, data = CRQA_Resp)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.7477 -0.6804 -0.2512  0.5225  5.8528 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)           4.98379    0.19922  25.016   <2e-16 ***
CRQAShuffled Control -0.41161    0.28174  -1.461    0.145    
CRQASurrogate         0.05509    0.20524   0.268    0.788    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.016 on 473 degrees of freedom
Multiple R-squared:  0.01085,   Adjusted R-squared:  0.00667 
F-statistic: 2.595 on 2 and 473 DF,  p-value: 0.07572

Testing effects of conditions

  • make a (probably underpowered) mixed model testing effects of the different conditions on heart rate and respiration coordination
  • N.B: would it make sense to include surrogate pairs? and if so how? what would that tell you?
summary(m_ENTR_resp)
Linear mixed model fit by REML t-tests use Satterthwaite approximations to degrees of
  freedom [lmerMod]
Formula: ENTR ~ Condition + (1 | Study) + (1 + Trial | Group)
   Data: Finaldata_Resp

REML criterion at convergence: -111832.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.1216 -0.8903  0.1167  0.6473  1.7808 

Random effects:
 Groups   Name        Variance  Std.Dev.    Corr 
 Group    (Intercept) 4.996e-02 0.223510537      
          Trial       1.793e-02 0.133884757 -0.91
 Study    (Intercept) 3.288e-12 0.000001813      
 Residual             8.553e-03 0.092484166      
Number of obs: 58240, groups:  Group, 10; Study, 2

Fixed effects:
                         Estimate   Std. Error           df t value Pr(>|t|)    
(Intercept)              1.855845     0.031530     7.000000   58.86 1.56e-10 ***
ConditionSelfPaced       0.288444     0.002866 58217.000000  100.66  < 2e-16 ***
ConditionSynchronous     0.015790     0.001514 58227.000000   10.43  < 2e-16 ***
ConditionTurnTaking     -0.037968     0.001514 58229.000000  -25.09  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) CndtSP CndtnS
CndtnSlfPcd -0.025              
CndtnSynchr -0.027  0.322       
CndtnTrnTkn -0.029  0.499  0.555

Effects of respiration coordination on heart rate coordination

  • describe how you would test those.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMgQW5hbHlzaW5nIEhlYXJ0IFJhdGUgYW5kIFJlc3BpcmF0aW9uIGRhdGEKClRoZSBnb2FsIG9mIHRoaXMgYXNzaWdubWVudCBpcyB0byBmaXJzdCBmYW1pbGlhcml6ZSB5b3Ugd2l0aCBoZWFydCByYXRlLCBhbmQgcmVzcGlyYXRpb24gZGF0YSBhbmQgdGhlaXIgcHJlcHJvY2Vzc2luZy4gVGhlIHNlY29uZCBwYXJ0IGV4cGxvcmVzIGhvdyB0byBhbmFseXplIGludGVycGVyc29uYWwgY29vcmRpbmF0aW9uIG9mIHRoZXNlIHNpZ25hbHMuCgpUaGVzZSBhcmUgdGhlIHF1ZXN0aW9ucyB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBhdCB0aGUgZW5kIG9mIHRoZSBhc3NpZ25tZW50IChha2EgdGhhdCB5b3UgbmVlZCB0byBzdWJtaXQgYXMgcGFydCBvZiB0aGUgcG9ydGZvbGlvKQoKMSkgSG93IGRvIHlvdSBwcmVwcm9jZXNzIGhlYXJ0IHJhdGUgYW5kIHJlc3BpcmF0aW9uIGRhdGE/IERlc2NyaWJlIHRoZSBwcm9jZXNzLiBJZiBhbnkgZGF0YSBuZWVkcyB0byBiZSBleGNsdWRlZCwgbGlzdCB0aGUgZXhjbHVkZWQgZGF0YSBhbmQgbW90aXZhdGUgdGhlIGV4Y2x1c2lvbi4KCjIpIERvIHlvdSBvYnNlcnZlIGludGVycGVyc29uYWwgY29vcmRpbmF0aW9uIGluIGhlYXJ0IHJhdGUgYW5kIHJlc3BpcmF0aW9uPyBEZXNjcmliZSB5b3VyIGNvbnRyb2wgYmFzZWxpbmUsIHRoZSBtZXRob2QgdXNlZCB0byBxdWFudGlmeSBjb29yZGluYXRpb24sIGFuZCB0aGUgc3RhdGlzdGljYWwgbW9kZWxzIHVzZWQgdG8gaW5mZXIgd2hldGhlciBjb29yZGluYXRpb24gd2FzIGhpZ2hlciB0aGFuIGluIHRoZSBiYXNlbGluZS4gUmVwb3J0IHRoZSByZXN1bHRzIG9mIHRoZSBtb2RlbHMuCgozKSBEbyB5b3Ugb2JzZXJ2ZSBkaWZmZXJlbmNlcyBpbiBjb29yZGluYXRpb24gYmV0d2VlbiBjb25kaXRpb25zPyBSZXBvcnQgdGhlIG1vZGVscyBhbmQgcmVzdWx0cy4KCjQpIElzIHJlc3BpcmF0aW9uIGNvb3JkaW5hdGlvbiBhIGxpa2VseSBkcml2ZXIgb2YgaGVhcnQgcmF0ZSBjb29yZGluYXRpb24/IERlc2NyaWJlIGhvdyB5b3Ugd291bGQgdGVzdCBmb3IgaXQuIEJvbnVzIHBvaW50cyBpZiB5b3UgYWN0dWFsbHkgcnVuIHRoZSB0ZXN0cyBhbmQgcmVwb3J0IG1ldGhvZHMgYW5kIHJlc3VsdHMuCgpOLkIuIHRvIGdpdmUgeW91IGEgYml0IG1vcmUgZGF0YSBJIGluY2x1ZGVkIGRhdGEgZnJvbSBsYXN0IHllYXIgKFN0dWR5MSkgYW5kIGZyb20geW91ciBjbGFzcyAoU3R1ZHkyKS4gTm90ZSB0aGF0IHN5bmNocm9ub3VucyBhbmQgdHVybi10YWtpbmcgYXJlIHRoZSBzYW1lIGFjcm9zcyBib3RoIHN0dWRpZXMsIGJ1dCB0aGUgdGhpcmQgY29uZGl0aW9uIGlzIGRpZmZlcmVudDogbGFzdCB5ZWFyIGl0IHdhcyBzZWxmLXBhY2VkIGpvaW50IHJlYWRpbmc7IHRoaXMgeWVhciBpdCB3YXMgdGhlIHR2LXNlcmllcyBjb252ZXJzYXRpb24uIFNvIHlvdSBtaWdodCB3YW50IHRvIGV4Y2x1ZGUgdGhlIHNlbGYtcGFjZWQgcmVhZGluZyAoYnV0LCB1cCB0byB5b3UhKQoKIyMgU3RlcCBieSBzdGVwIHN1Z2dlc3Rpb25zIHRvIHNvbHZlIHRoZSBhc3NpZ25tZW50CgojIyMgRXhwbG9yaW5nIHBoeXNpb2xvZ2ljYWwgc2lnbmFscwoKLSBDaG9vc2Ugb25lIHBhaXIgKG9uZSBwYWlyLCB0aHJlZSBjb25kaXRpb25zKQotIExvYWQgdGhlIGxvZ3MKLSBQcm9kdWNlIGEgcGxvdCBvZiB0aGUgcGFydGljaXBhbnRzJyByZXNwaXJhdGlvbiBzaWduYWwgYW5kIGEgZGlmZmVyZW50IG9uZSBvZiB0aGUgcGFydGljaXBhbnRzJyBIUiBzaWduYWwgKGZvciBpbnNwZWN0aW5nIHdoZXRoZXIgdGhlIGRhdGEgaXMgdXNhYmxlKQogIE4uQjogcmVtZW1iZXIgdGhlIHNsaWRlczogYXJ0aWZhY3RzLCBkb3duc2FtcGxpbmcsIHNjYWxpbmcuCiAgTi5CLiBUaGUgZ3JpZEV4dHJhOjpncmlkLmFycmFuZ2UoKSBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIGRpc3BsYXkgdGhlIHBsb3RzIHNpZGUgYnkgc2lkZS4gRS5nLiBncmlkLmFycmFuZ2UocGxvdDEsIHBsb3QyLCBwbG90MywgbmNvbD0zKQotIENhbiB5b3UgZXllLWJhbGwgd2hpY2ggY29uZGl0aW9uIGlmIGFueSBkaXNwbGF5cyBtb3JlIHBoeXNpb2xvZ2ljYWwgY29vcmRpbmF0aW9uPwoKLSBSdW4gY3JxYSBvbiBoZWFydCByYXRlIGFuZCByZXNwaXJhdGlvbiBkYXRhIChmaW5kIHBhcmFtZXRlcnMsIHJ1biBjcnFhKQotIERvZXMgdGhpcyB0ZWxsIHlvdSBtb3JlIHRoYW4ganVzdCBleWViYWxsaW5nIHRoZSBwbG90cz8KYGBge3J9CiMgU2V0IHdvcmtpbmcgZGlyZWN0b3J5CnNldHdkKCJ+L09uZURyaXZlIC0gQWFyaHVzIHVuaXZlcnNpdGV0L0FVLUNvZ25pdGl2ZSBTY2llbmNlLzNyZCBTZW1lc3Rlci9FeHBlcmltZW50YWwgTWV0aG9kcyAzL0V4ZXJjaXNlL0Fzc2lnbm1lbnRzL0Fzc2lnbm1lbnRfM05FVyIpCgojIExvYWQgcmVsZXZhbnQgcGFja2FnZXMKbGlicmFyeShnZ3Bsb3QyKTsgbGlicmFyeShncm91cGRhdGEyKTsgbGlicmFyeShkcGx5cik7IGxpYnJhcnkoY3JxYSk7IGxpYnJhcnkoc3RyaW5ncik7IGxpYnJhcnkocmVhZHIpCgojIExvYWQgaW4gZGF0YWZpbGUKU3luY2hfZGF0YT1yZWFkLmNzdigiRGF0YS9TdHVkeTJfRzVfVDFfU3luY2hyb25vdXMuY3N2IikKVHVybl9kYXRhPXJlYWQuY3N2KCJEYXRhL1N0dWR5Ml9HNV9UMl9UdXJuVGFraW5nLmNzdiIpCkNvbnZfZGF0YT1yZWFkLmNzdigiRGF0YS9TdHVkeTJfRzVfVDNfQ29udmVyc2F0aW9uLmNzdiIpCgojIFRvIGNyZWF0ZSBwbG90cyBmb3IgcmVzcGlyYXRpb24gCmdncGxvdChDb252X2RhdGEsIGFlcyh4PXRpbWUsIHk9IFJlc3AxKSkgKyBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsgZ2VvbV9saW5lKGFlcyh4PXRpbWUsIHk9UmVzcDIsIGNvbG9yID0icmVkIikpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikKZ2dwbG90KFR1cm5fZGF0YSwgYWVzKHg9dGltZSwgeT0gUmVzcDEpKSArIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKyBnZW9tX2xpbmUoYWVzKHg9dGltZSwgeT1SZXNwMiwgY29sb3IgPSJyZWQiKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQpnZ3Bsb3QoU3luY2hfZGF0YSwgYWVzKHg9dGltZSwgeT0gUmVzcDEpKSArIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKyBnZW9tX2xpbmUoYWVzKHg9dGltZSwgeT1SZXNwMiwgY29sb3IgPSJyZWQiKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQoKCiMgVG8gY3JlYXRlIHBsb3RzIGZvciBoZWFydCByYXRlCmdncGxvdChDb252X2RhdGEsIGFlcyh4PXRpbWUsIHk9IEhSMSkpICsgZ2VvbV9saW5lKGNvbG9yID0gInB1cnBsZSIpICsgZ2VvbV9saW5lKGFlcyh4PXRpbWUsIHk9SFIyKSwgY29sb3IgPSAiY2hhcnRyZXVzZTQiKQpnZ3Bsb3QoVHVybl9kYXRhLCBhZXMoeD10aW1lLCB5PSBIUjEpKSArIGdlb21fbGluZShjb2xvciA9ICJwdXJwbGUiKSArIGdlb21fbGluZShhZXMoeD10aW1lLCB5PUhSMiksIGNvbG9yID0gImNoYXJ0cmV1c2U0IikKZ2dwbG90KFN5bmNoX2RhdGEsIGFlcyh4PXRpbWUsIHk9IEhSMSkpICsgZ2VvbV9saW5lKGNvbG9yID0gInB1cnBsZSIpICsgZ2VvbV9saW5lKGFlcyh4PXRpbWUsIHk9SFIyKSwgY29sb3IgPSAiY2hhcnRyZXVzZTQiKQoKIyBUbyBkb3duc2FtcGxlIGRhdGEKQ29udl9kYXRhID0gQ29udl9kYXRhICU+JSBncm91cChuID0gMTAwLCBtZXRob2QgPSAnZ3JlZWR5JykgJT4lICAgZHBseXI6OnN1bW1hcmlzZSh0aW1lID0gbWVhbih0aW1lLG5hLnJtPVQpLCBIUjEgPSBtZWFuKEhSMSxuYS5ybT1UKSwgSFIyID0gbWVhbihIUjIsbmEucm09VCksIFJlc3AxID0gbWVhbihSZXNwMSxuYS5ybT1UKSwgUmVzcDIgPSBtZWFuKFJlc3AyLG5hLnJtPVQpKQoKU3luY2hfZGF0YSA9IFN5bmNoX2RhdGEgJT4lIGdyb3VwKG4gPSAxMDAsIG1ldGhvZCA9ICdncmVlZHknKSAlPiUgICBkcGx5cjo6c3VtbWFyaXNlKHRpbWUgPSBtZWFuKHRpbWUsbmEucm09VCksIEhSMSA9IG1lYW4oSFIxLG5hLnJtPVQpLCBIUjIgPSBtZWFuKEhSMixuYS5ybT1UKSwgUmVzcDEgPSBtZWFuKFJlc3AxLG5hLnJtPVQpLCBSZXNwMiA9IG1lYW4oUmVzcDIsbmEucm09VCkpCgpUdXJuX2RhdGEgPSBUdXJuX2RhdGEgJT4lIGdyb3VwKG4gPSAxMDAsIG1ldGhvZCA9ICdncmVlZHknKSAlPiUgICBkcGx5cjo6c3VtbWFyaXNlKHRpbWUgPSBtZWFuKHRpbWUsbmEucm09VCksIEhSMSA9IG1lYW4oSFIxLG5hLnJtPVQpLCBIUjIgPSBtZWFuKEhSMixuYS5ybT1UKSwgUmVzcDEgPSBtZWFuKFJlc3AxLG5hLnJtPVQpLCBSZXNwMiA9IG1lYW4oUmVzcDIsbmEucm09VCkpCgojIFRvIHJlbW92ZSBvdXRsaWVycwpyZW1vdmVPdXRzIDwtIGZ1bmN0aW9uKHRzLHRocmVzaG9sZCl7CiAgdHNbdHMgPiAobWVhbih0cyxuYS5ybT1UKSArICAgICAgICAgICAgICAodGhyZXNob2xkKnNkKHRzLG5hLnJtPVQpKSkgfCAgdHMgPCAobWVhbih0cyxuYS5ybT1UKSAtICAgICAgICAgICAodGhyZXNob2xkKnNkKHRzLG5hLnJtPVQpKSldID0gbWVhbih0cyxuYS5ybT1UKSAgIAogIHJldHVybih0cyl9Cgp0aHJlc2hvbGQ9Mi41IAoKQ29udl9kYXRhJEhSMT1yZW1vdmVPdXRzKENvbnZfZGF0YSRIUjEsdGhyZXNob2xkKQpDb252X2RhdGEkSFIyPXJlbW92ZU91dHMoQ29udl9kYXRhJEhSMix0aHJlc2hvbGQpClR1cm5fZGF0YSRIUjE9cmVtb3ZlT3V0cyhUdXJuX2RhdGEkSFIxLCB0aHJlc2hvbGQpClR1cm5fZGF0YSRIUjI9cmVtb3ZlT3V0cyhUdXJuX2RhdGEkSFIyLCB0aHJlc2hvbGQpClN5bmNoX2RhdGEkSFIxPXJlbW92ZU91dHMoU3luY2hfZGF0YSRIUjEsIHRocmVzaG9sZCkKU3luY2hfZGF0YSRIUjI9cmVtb3ZlT3V0cyhTeW5jaF9kYXRhJEhSMiwgdGhyZXNob2xkKQoKQ29udl9kYXRhJFJlc3AxPXJlbW92ZU91dHMoQ29udl9kYXRhJFJlc3AxLHRocmVzaG9sZCkKQ29udl9kYXRhJFJlc3AyPXJlbW92ZU91dHMoQ29udl9kYXRhJFJlc3AyLHRocmVzaG9sZCkKVHVybl9kYXRhJFJlc3AxPXJlbW92ZU91dHMoVHVybl9kYXRhJFJlc3AxLCB0aHJlc2hvbGQpClR1cm5fZGF0YSRSZXNwMj1yZW1vdmVPdXRzKFR1cm5fZGF0YSRSZXNwMiwgdGhyZXNob2xkKQpTeW5jaF9kYXRhJFJlc3AxPXJlbW92ZU91dHMoU3luY2hfZGF0YSRSZXNwMSwgdGhyZXNob2xkKQpTeW5jaF9kYXRhJFJlc3AyPXJlbW92ZU91dHMoU3luY2hfZGF0YSRSZXNwMiwgdGhyZXNob2xkKQoKIyBUbyBzY2FsZSBkYXRhCkNvbnZfZGF0YSRSZXNwMVM9c2NhbGUoQ29udl9kYXRhJFJlc3AxKQpDb252X2RhdGEkUmVzcDJTPXNjYWxlKENvbnZfZGF0YSRSZXNwMikgIApDb252X2RhdGEkSFIxUz1zY2FsZShDb252X2RhdGEkSFIxKQpDb252X2RhdGEkSFIyUz1zY2FsZShDb252X2RhdGEkSFIyKQoKVHVybl9kYXRhJFJlc3AxUz1zY2FsZShUdXJuX2RhdGEkUmVzcDEpClR1cm5fZGF0YSRSZXNwMlM9c2NhbGUoVHVybl9kYXRhJFJlc3AyKSAgClR1cm5fZGF0YSRIUjFTPXNjYWxlKFR1cm5fZGF0YSRIUjEpClR1cm5fZGF0YSRIUjJTPXNjYWxlKFR1cm5fZGF0YSRIUjIpCgpTeW5jaF9kYXRhJFJlc3AxUz1zY2FsZShTeW5jaF9kYXRhJFJlc3AxKQpTeW5jaF9kYXRhJFJlc3AyUz1zY2FsZShTeW5jaF9kYXRhJFJlc3AyKSAgClN5bmNoX2RhdGEkSFIxUz1zY2FsZShTeW5jaF9kYXRhJEhSMSkKU3luY2hfZGF0YSRIUjJTPXNjYWxlKFN5bmNoX2RhdGEkSFIyKQoKIyBUbyBjcmVhdGUgSFIgcGxvdCBmb3Igc2NsYWVkIGRhdGEKcGxvdDEgPSBnZ3Bsb3QoQ29udl9kYXRhLCBhZXMoeD10aW1lLCB5PSBIUjFTKSkgKyBnZW9tX2xpbmUoY29sb3IgPSAicHVycGxlIikgKyBnZW9tX2xpbmUoYWVzKHg9dGltZSwgeT1IUjJTKSwgY29sb3IgPSAiY2hhcnRyZXVzZTQiKQpwbG90MiA9IGdncGxvdChUdXJuX2RhdGEsIGFlcyh4PXRpbWUsIHk9IEhSMVMpKSArIGdlb21fbGluZShjb2xvciA9ICJwdXJwbGUiKSArIGdlb21fbGluZShhZXMoeD10aW1lLCB5PUhSMlMpLCBjb2xvciA9ICJjaGFydHJldXNlNCIpCnBsb3QzID0gZ2dwbG90KFN5bmNoX2RhdGEsIGFlcyh4PXRpbWUsIHk9IEhSMVMpKSArIGdlb21fbGluZShjb2xvciA9ICJwdXJwbGUiKSArIGdlb21fbGluZShhZXMoeD10aW1lLCB5PUhSMlMpLCBjb2xvciA9ICJjaGFydHJldXNlNCIpCgojIFRvIG1ha2Ugb25lIGdyaWQgd2l0aCBhbGwgSFIgcGxvdHMKZ3JpZEV4dHJhOjpncmlkLmFycmFuZ2UocGxvdDEsIHBsb3QyLCBwbG90MykKCnBsb3Q0ID0gZ2dwbG90KENvbnZfZGF0YSwgYWVzKHg9dGltZSwgeT0gUmVzcDFTKSkgKyBnZW9tX2xpbmUoY29sb3IgPSAicmVkIikgKyBnZW9tX2xpbmUoYWVzKHg9dGltZSwgeT1SZXNwMlMpLCBjb2xvciA9ICJibHVlIikKcGxvdDUgPSBnZ3Bsb3QoVHVybl9kYXRhLCBhZXMoeD10aW1lLCB5PSBSZXNwMVMpKSArIGdlb21fbGluZShjb2xvciA9ICJyZWQiKSArIGdlb21fbGluZShhZXMoeD10aW1lLCB5PVJlc3AyUyksIGNvbG9yID0gImJsdWUiKQpwbG90NiA9IGdncGxvdChTeW5jaF9kYXRhLCBhZXMoeD10aW1lLCB5PSBSZXNwMVMpKSArIGdlb21fbGluZShjb2xvciA9ICJyZWQiKSArIGdlb21fbGluZShhZXMoeD10aW1lLCB5PVJlc3AyUyksIGNvbG9yID0gImJsdWUiKQoKIyBUbyBtYWtlIG9uZSBncmlkIHdpdGggYWxsIFJlc3BpcmF0aW9uIHBsb3RzCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKHBsb3Q0LCBwbG90NSwgcGxvdDYpCgojIFRvIHBlcmZvcm0gQ1JRQQpwYXIgPSBsaXN0KGxnTSA9ICA1MCwgc3RlcHMgPSBzZXEoMSwgNiwgMSksICByYWRpdXNzcGFuID0gMTAwLCAgcmFkaXVzc2FtcGxlID0gNDAsIG5vcm1hbGl6ZSA9IDAsICByZXNjYWxlID0gMCwgIG1pbmRpYWdsaW5lID0gMiwgIG1pbnZlcnRsaW5lID0gMiwgIHR3ID0gMCwgIHdoaXRlbGluZSA9IEZBTFNFLCAgcmVjcHQgPSBGQUxTRSwgIGZubnBlcmNlbnQgPSAxMCwgIHR5cGVhbWkgPSAibWluZGlwIikKCiMgVG8gY3JlYXRlIGEgbG9vcCB0byBnZXQgcGFyYW10ZXJzIApmaWxlcyA9IGxpc3QoQ29udl9kYXRhLCBTeW5jaF9kYXRhLCBUdXJuX2RhdGEpCgpEaW1lbnNpb25fUmVzcCA9IE5VTEwKUmFkaXVzX1Jlc3AgPSBOVUxMCkRlbGF5X1Jlc3AgPSBOVUxMCkRpbWVuc2lvbl9IUiA9IE5VTEwKUmFkaXVzX0hSID0gTlVMTApEZWxheV9IUiA9IE5VTEwKCm49MQoKZm9yIChmaWxlIGluIGZpbGVzKSB7CmFuc19SZXNwID0gdHJ5KG9wdGltaXplUGFyYW0oZmlsZSRSZXNwMVMsIGZpbGUkUmVzcDJTLCBwYXIsIG1pbi5yZWMgPSAyLCBtYXgucmVjID0gOCkpCmFuc19IUiA9IHRyeShvcHRpbWl6ZVBhcmFtKGZpbGUkSFIxUywgZmlsZSRIUjJTLCBwYXIsIG1pbi5yZWMgPSAyLCBtYXgucmVjID0gOCkpCgppZiAobGVuZ3RoKGFuc19SZXNwKSA+IDEpIHsKICAKRGltZW5zaW9uX1Jlc3Bbbl0gPSBhbnNfUmVzcCRlbWRkaW0KUmFkaXVzX1Jlc3Bbbl0gPSBhbnNfUmVzcCRyYWRpdXMKRGVsYXlfUmVzcFtuXSA9IGFuc19SZXNwJGRlbGF5CiAgfSAKICAKICBlbHNlIHsKICAgIApEaW1lbnNpb25fUmVzcFtuXSA9IE5BClJhZGl1c19SZXNwW25dID0gTkEKRGVsYXlfUmVzcFtuXSA9IE5BCiAgICAKICB9CgppZiAobGVuZ3RoKGFuc19IUikgPiAxKSB7CiAgCkRpbWVuc2lvbl9IUltuXSA9IGFuc19IUiRlbWRkaW0KUmFkaXVzX0hSW25dID0gYW5zX0hSJHJhZGl1cwpEZWxheV9IUltuXSA9IGFuc19IUiRkZWxheQogIH0gCiAgCiAgZWxzZSB7CiAgICAKRGltZW5zaW9uX0hSW25dID0gTkEKUmFkaXVzX0hSW25dID0gTkEKRGVsYXlfSFJbbl0gPSBOQQogICAgCiAgfQogIApuPW4rMQoKfQoKcGFyYW1ldGVycyA9IGRhdGEuZnJhbWUoRGltZW5zaW9uX1Jlc3AsIFJhZGl1c19SZXNwLCBEZWxheV9SZXNwLCBEaW1lbnNpb25fSFIsIFJhZGl1c19IUiwgRGVsYXlfSFIpCgoKbWVhbihwYXJhbWV0ZXJzJERpbWVuc2lvbl9SZXNwLCBuYS5ybSA9IFRSVUUpICMgMgptZWFuKHBhcmFtZXRlcnMkRGVsYXlfUmVzcCwgbmEucm0gPSBUUlVFKSAjIDI4Cm1lYW4ocGFyYW1ldGVycyRSYWRpdXNfUmVzcCwgbmEucm0gPSBUUlVFKSAjIDAuMzc4CgpSZXN1bHRzPWNycWEgKFN5bmNoX2RhdGEkUmVzcDFTLCBTeW5jaF9kYXRhJFJlc3AyUywgZGVsYXk9MjgsIGVtYmVkPTIsIHJhZGl1cz0gMC4zNzgsbm9ybWFsaXplPTAscmVzY2FsZT0wLG1pbmRpYWdsaW5lID0gMixtaW52ZXJ0bGluZSA9IDIpCgojIFRvIHBsb3QgUlFBClJQPVJlc3VsdHMkUlAgClJQID0gbWF0cml4KGFzLm51bWVyaWMoUlApLCBucm93ID0gbmNvbChSUCkpICAKY29scyA9IGMoIndoaXRlIiwiYmx1ZTQiKSAKaW1hZ2UoUlAsIHhsYWIgPSAiIiwgeWxhYiA9ICIiLCBjb2wgPSBjb2xzKQoKIyBUbyBleHBsb3JlIGxhZ3Mgb2YgY29vcmRpbmF0aW9uIApQcm9maWxlPWRycGRmcm9tdHMoU3luY2hfZGF0YSRSZXNwMVMsIFN5bmNoX2RhdGEkUmVzcDJTLGRhdGF0eXBlID0gJ2NvbnRpbnVvdXMnLHdzPTUwLHJhZGl1cz0wLjQ0MykgCnRpbWVjb3Vyc2UgPSByb3VuZCggc2VxKC01MDAwLDUwMDAsMTAwKS8xMDAwLCBkaWdpdCA9IDEpIAptYXhsYWcgPSBQcm9maWxlJG1heGxhZy8xMDAwIApwcm9maWxlID0gUHJvZmlsZSRwcm9maWxlKjEwMCAKUHJvZj1kYXRhLmZyYW1lKHByb2ZpbGUpIApnZ3Bsb3QoUHJvZiwgYWVzKHRpbWVjb3Vyc2UscHJvZmlsZSkpK2dlb21fbGluZSgpKyBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB0aW1lY291cnNlW21heGxhZ10sIGNvbG91cj0ncmVkJykKCmBgYAogCiMjIyBTeXN0ZW1hdGljYWxseSBwcmUtcHJvY2VzcyB0aGUgZGF0YQotIExvb3AgdGhyb3VnaCBhbGwgdGhlIGZpbGVzIChlaXRoZXIgd2l0aCBhIGxvb3Agb3Igd2l0aCBhIGZ1bmN0aW9uKSwgY2hlY2sgd2hpY2ggZmlsZXMgc2hvdWxkIGJlIGV4Y2x1ZGVkLCBpZiBhbnksIGFuZCBzYXZlIHRoZSBwcmUtcHJvY2Vzc2VkIHRpbWUtc2VyaWVzLiBUaXA6IHBsb3QgYW5kIHZpc3VhbGx5IGluc3BlY3QgdGhlIGRhdGEgdG8gZmlndXJlIG91dCB3aGljaCBzaG91bGQgYmUgZXhjbHVkZWQuCi0gUnVuIGNycWEgb24gYWxsIHRoZSBwcmUtcHJvY2Vzc2VkIHRpbWUtc2VyaWVzIGFuZCBzYXZlIHRoZSBvdXRwdXQgKGRvbid0IGZvcmdldCB0byBhZGQgY29sdW1ucyB3aXRoIHN0dWR5LCBncm91cCwgY29uZGl0aW9uIGFuZCB0cmlhbCkuIFRpcDogcmVtZW1iZXIgdG8gZmlyc3QgYXNzZXNzIG9wdGltYWwgcGFyYW1ldGVycyAoZGltZW5zaW9ucywgZGVsYXksIHJhZGl1cykgYWNyb3NzIGFsbCB0aW1lc2VyaWVzLiBUaXA6IGl0IHdpbGwgb2Z0ZW4gZmFpbCwganVzdCB0YWtlIHdoYXRldmVyIHBhcmFtZXRlcnMgeW91IGdldCwgc2VsZWN0IG9wdGltYWwgYWNyb3NzIHRpbWVzZXJpZXMgcGFyYW1ldGVycyBhbmQgcnVuIGNycWEgb24gYWxsIHRpbWVzZXJpZXMgd2l0aCB0aG9zZS4gVGlwOiBkb3VibGUgY2hlY2sgdGhlIHJyLiBXaGVuIEkgcmFuIHRoZSBsb29wLCBJIGdvdCB2ZXJ5IGxvdyByciwgc28gSSBhZGp1c3RlZCB0aGUgcmFkaXVzIHVudGlsIHRoZSBhdmVyYWdlIG9mIHJyIGFjcm9zcyBhbGwgcGFpcnMgd2FzIGFwcHJveC4gNCUuCgpgYGB7cn0KIyBUbyBjcmVhdGUgYSBmaWxlbGlzdApmaWxlbGlzdCA9IGxpc3QuZmlsZXMocGF0aCA9ICJEYXRhIiwgcGF0dGVybiA9ICIuY3N2IikKCiMgVG8gY3JlYXRlIGEgZnVuY3Rpb24gdGhhdCBjYW4gcHJlcHJvY2VzcyB0aGUgZGF0YQpwcmVwcm9jZXNzaW5nID0gZnVuY3Rpb24oZGF0YSkgewogIAogIGRhdGEgPSBkYXRhICU+JSBncm91cChuID0gMTAwLCBtZXRob2QgPSAnZ3JlZWR5JykgJT4lICAgZHBseXI6OnN1bW1hcmlzZSh0aW1lID0gbWVhbih0aW1lLG5hLnJtPVQpLCBIUjEgPSBtZWFuKEhSMSxuYS5ybT1UKSwgSFIyID0gbWVhbihIUjIsbmEucm09VCksIFJlc3AxID0gbWVhbihSZXNwMSxuYS5ybT1UKSwgUmVzcDIgPSBtZWFuKFJlc3AyLG5hLnJtPVQpKQogIAogIGRhdGEkSFIxPXJlbW92ZU91dHMoZGF0YSRIUjEsdGhyZXNob2xkKQogIGRhdGEkSFIyPXJlbW92ZU91dHMoZGF0YSRIUjIsdGhyZXNob2xkKQogIGRhdGEkUmVzcDE9cmVtb3ZlT3V0cyhkYXRhJFJlc3AxLHRocmVzaG9sZCkKICBkYXRhJFJlc3AyPXJlbW92ZU91dHMoZGF0YSRSZXNwMix0aHJlc2hvbGQpCiAgCiAgZGF0YSRSZXNwMT1zY2FsZShkYXRhJFJlc3AxKQogIGRhdGEkUmVzcDI9c2NhbGUoZGF0YSRSZXNwMikgIAogIGRhdGEkSFIxPXNjYWxlKGRhdGEkSFIxKQogIGRhdGEkSFIyPXNjYWxlKGRhdGEkSFIyKQogIAogIHJldHVybihkYXRhKQp9CgojIFRvIGNyZWF0ZSBhIGxvb3AgdG8gcHJlcHJvY2VzIGFsbCB0aGUgZGF0YSBhbmQgY3JlYXRlIHBsb3RzCkZpbmFsX2RhdGEgPSBkYXRhLmZyYW1lKCkKCm49MQoKZm9yIChmaWxlIGluIGZpbGVsaXN0KSB7CiAgZGF0YT1yZWFkX2NzdihwYXN0ZTAoIkRhdGEvIixmaWxlKSkKICAKICBEYXRhZmlsZT1wcmVwcm9jZXNzaW5nKGRhdGEpCiAgCiAgRGF0YWZpbGUkZmlsZW5hbWUgPSBmaWxlbGlzdFtuXQogIAogIGFuc19SZXNwID0gdHJ5KG9wdGltaXplUGFyYW0oRGF0YWZpbGUkUmVzcDEsIERhdGFmaWxlJFJlc3AyLCBwYXIsIG1pbi5yZWMgPSAyLCBtYXgucmVjID0gOCkpCiAgYW5zX0hSID0gdHJ5KG9wdGltaXplUGFyYW0oRGF0YWZpbGUkSFIxLCBEYXRhZmlsZSRIUjIsIHBhciwgbWluLnJlYyA9IDIsIG1heC5yZWMgPSA4KSkKICAKICBpZiAobGVuZ3RoKGFuc19SZXNwKSA+IDEpIHsKICAKRGF0YWZpbGUkRGltZW5zaW9uX1Jlc3AgPSBhbnNfUmVzcCRlbWRkaW0KRGF0YWZpbGUkUmFkaXVzX1Jlc3AgPSBhbnNfUmVzcCRyYWRpdXMKRGF0YWZpbGUkRGVsYXlfUmVzcCA9IGFuc19SZXNwJGRlbGF5CiAgfSAKICAKICBlbHNlIHsKICAgIApEYXRhZmlsZSREaW1lbnNpb25fUmVzcCA9IE5BCkRhdGFmaWxlJFJhZGl1c19SZXNwID0gTkEKRGF0YWZpbGUkRGVsYXlfUmVzcCA9IE5BCiAgICAKICB9CgppZiAobGVuZ3RoKGFuc19IUikgPiAxKSB7CiAgCkRhdGFmaWxlJERpbWVuc2lvbl9IUiA9IGFuc19IUiRlbWRkaW0KRGF0YWZpbGUkUmFkaXVzX0hSID0gYW5zX0hSJHJhZGl1cwpEYXRhZmlsZSREZWxheV9IUiA9IGFuc19IUiRkZWxheQogIH0gCiAgCiAgZWxzZSB7CiAgICAKRGF0YWZpbGUkRGltZW5zaW9uX0hSID0gTkEKRGF0YWZpbGUkUmFkaXVzX0hSID0gTkEKRGF0YWZpbGUkRGVsYXlfSFIgPSBOQQogICAgCiAgfQogIAogIEZpbmFsX2RhdGEgPSByYmluZChGaW5hbF9kYXRhLCBEYXRhZmlsZSkKICAKICBSZXNwX3Bsb3Q9IGdncGxvdChEYXRhZmlsZSwgYWVzKHg9dGltZSwgeT0gUmVzcDEpKSArIGdlb21fbGluZShjb2xvciA9ICJyZWQiKSArIGdlb21fbGluZShhZXMoeD10aW1lLCB5PVJlc3AyKSwgY29sb3IgPSAiYmx1ZSIpCiAgCiAgSFJfcGxvdCA9IGdncGxvdChEYXRhZmlsZSwgYWVzKHg9dGltZSwgeT0gSFIxKSkgKyBnZW9tX2xpbmUoY29sb3IgPSAicHVycGxlIikgKyBnZW9tX2xpbmUoYWVzKHg9dGltZSwgeT1IUjIpLCBjb2xvciA9ICJjaGFydHJldXNlNCIpCiAgCiAgZmluYWxfcGxvdD1ncmlkRXh0cmE6OmdyaWQuYXJyYW5nZShSZXNwX3Bsb3QsIEhSX3Bsb3QpCiAgCiAgZ2dzYXZlKHBhc3RlMChmaWxlLCAiLnBuZyIpLCBwbG90ID0gZmluYWxfcGxvdCwgcGF0aCA9ICJQbG90IikKICAKICBuPW4rMQp9IAoKIyBCYXNlZCBvbiBwbG90cyB3ZSBjaG9vc2UgdG8gcmVtb3ZlIHRoZSBmb2xsb3dpbmcgZGF0YToKICAjIFN0dWR5MV9HMV9UMSwgU3R1ZHkxX0cxX1QyLCBTdHVkeTFfRzJfVDEsIFN0dWR5MV9HMl9UMgoKRmluYWxfZGF0YT1GaW5hbF9kYXRhW0ZpbmFsX2RhdGEkZmlsZW5hbWUgIT0gIlN0dWR5MV9HMV9UMV9TeW5jaHJvbm91cy5jc3YiLCBdCkZpbmFsX2RhdGE9RmluYWxfZGF0YVtGaW5hbF9kYXRhJGZpbGVuYW1lICE9ICJTdHVkeTFfRzFfVDJfVHVyblRha2luZy5jc3YiLCBdCkZpbmFsX2RhdGE9RmluYWxfZGF0YVtGaW5hbF9kYXRhJGZpbGVuYW1lICE9ICJTdHVkeTFfRzJfVDFfVHVyblRha2luZy5jc3YiLCBdCkZpbmFsX2RhdGE9RmluYWxfZGF0YVtGaW5hbF9kYXRhJGZpbGVuYW1lICE9ICJTdHVkeTFfRzJfVDJfU3luY2hyb25vdXMuY3N2IiwgXQoKIyBUbyBnZXQgY29sdW1uIHdpdGggc3R1ZHkgbnVtYmVyCmZvciAoZmlsZSBpbiAxOm5yb3coRmluYWxfZGF0YSkpewogIGlmIChncmVwbCgiU3R1ZHkxIiwgRmluYWxfZGF0YSRmaWxlbmFtZVtmaWxlXSkpewogICAgRmluYWxfZGF0YSRTdHVkeVtmaWxlXSA9IDF9CiAgaWYgKGdyZXBsKCJTdHVkeTIiLCBGaW5hbF9kYXRhJGZpbGVuYW1lW2ZpbGVdKSl7CiAgICBGaW5hbF9kYXRhJFN0dWR5W2ZpbGVdID0gMn0KfQoKIyBUbyBnZXQgZ3JvdXAgbnVtYmVyCkZpbmFsX2RhdGEkR3JvdXA9cmVnbWF0Y2hlcyhGaW5hbF9kYXRhJGZpbGVuYW1lLCByZWdleHByKCJbR10uKlswLTldIiwgRmluYWxfZGF0YSRmaWxlbmFtZSkpCgpGaW5hbF9kYXRhJEdyb3VwID0gZ3N1YigiW0csIF8sIFRdIiwgIiIsIEZpbmFsX2RhdGEkR3JvdXApCgpGaW5hbF9kYXRhJEdyb3VwPXN1YnN0cihGaW5hbF9kYXRhJEdyb3VwLCAxLCBuY2hhcihGaW5hbF9kYXRhJEdyb3VwKS0xKQoKIyBUbyBnZXQgdHJpYWwgbnVtYmVyCkZpbmFsX2RhdGEkVHJpYWw9cmVnbWF0Y2hlcyhGaW5hbF9kYXRhJGZpbGVuYW1lLCByZWdleHByKCJbVF0uKlswLTldIiwgRmluYWxfZGF0YSRmaWxlbmFtZSkpCgpGaW5hbF9kYXRhJFRyaWFsID0gZ3N1YigiW1RdIiwgIiIsIEZpbmFsX2RhdGEkVHJpYWwpCgojIFRvIGdldCBjb25kaXRpb24KRmluYWxfZGF0YSA9IEZpbmFsX2RhdGEgJT4lIGdyb3VwX2J5KGZpbGVuYW1lKSAlPiUgbXV0YXRlKENvbmRpdGlvbiA9IGdzdWIoJy57NH0kJywgJycsIHN0cnNwbGl0KGZpbGVuYW1lLCAiXyIpW1sxXV1bNF0pKQoKIyBUbyB3cml0ZSBkYXRhIHRvIGEgY3N2IGZpbGUKd3JpdGUuY3N2KEZpbmFsX2RhdGEsIGZpbGUgPSAiRmluYWxfZGF0YS5jc3YiKQoKIyBUbyBnZXQgbWVhbiBwYXJhbWV0ZXJzIGZvciBDUlFBCm1lYW4oRmluYWxfZGF0YSREaW1lbnNpb25fUmVzcCwgbmEucm0gPSBUUlVFKSAjIDMuMjAgPSAzCm1lYW4oRmluYWxfZGF0YSRSYWRpdXNfUmVzcCwgbmEucm0gPSBUUlVFKSAjIDAuNjE0Cm1lYW4oRmluYWxfZGF0YSREZWxheV9SZXNwLCBuYS5ybSA9IFRSVUUpICMgMjkuNDYgPSAyOQoKbWVhbihGaW5hbF9kYXRhJERpbWVuc2lvbl9IUiwgbmEucm0gPSBUUlVFKSAjIDExLjk1ID0gMTIgCm1lYW4oRmluYWxfZGF0YSRSYWRpdXNfSFIsIG5hLnJtID0gVFJVRSkgIyAxLjYzMwptZWFuKEZpbmFsX2RhdGEkRGVsYXlfSFIsIG5hLnJtID0gVFJVRSkgIyAyOS44OSA9IDMwCgojIFRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIHBlcmZvcm0gQ1JRQSBmb3IgZWFjaCBmaWxlCkNSUUEgPSBmdW5jdGlvbihkYXRhKSB7CiAgUmVzcENSUUEgPSBjcnFhKGRhdGEkUmVzcDEsIGRhdGEkUmVzcDIsIGRlbGF5ID0gMjksIGVtYmVkID0gMywKICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IDAuOCwgbm9ybWFsaXplID0gMCwgcmVzY2FsZSA9IDAsCiAgICAgICAgICAgICAgICAgICBtaW5kaWFnbGluZSA9IDIsIG1pbnZlcnRsaW5lID0gMikKICBSZXNwQ1JRQSRSUCA9IE5VTEwgICMgUmVtb3ZlIGxhcmdlIG1hdHJpeAogIFJlc3BDUlFBID0gYXNfdGliYmxlKFJlc3BDUlFBKSAlPiUKICAgIG11dGF0ZSh0eXBlID0gJ1Jlc3AnKQogIAogIEhyQ1JRQSA9IGNycWEoZGF0YSRIUjEsIGRhdGEkSFIyLCBkZWxheSA9IDMwLCBlbWJlZCA9IDEyLAogICAgICAgICAgICAgICAgcmFkaXVzID0gMi42LCBub3JtYWxpemUgPSAwLCByZXNjYWxlID0gMCwKICAgICAgICAgICAgICAgIG1pbmRpYWdsaW5lID0gMiwgbWludmVydGxpbmUgPSAyKQogIEhyQ1JRQSRSUCA9IE5VTEwgICMgUmVtb3ZlIGxhcmdlIG1hdHJpeAogIEhyQ1JRQSA9IGFzX3RpYmJsZShIckNSUUEpICU+JQogICAgbXV0YXRlKHR5cGUgPSAnSFInKQogIAogIHJldHVybihyYmluZChSZXNwQ1JRQSwgSHJDUlFBKSkKfQoKIyBUbyB1c2UgdGhlIGZ1bmN0aW9uIApjcnFhX3Jlc3VsdHMgPSBGaW5hbF9kYXRhICU+JQogIGRwbHlyOjpzZWxlY3QoLWMoLmdyb3VwcykpICU+JSAgIyBSZW1vdmUgLmdyb3VwcyAobm90IG5lZWRlZCByaWdodD8pCiAgZHBseXI6Omdyb3VwX2J5KGZpbGVuYW1lKSAlPiUgICMgR3JvdXAgYnkgZWFjaCBmaWxlCiAgZHBseXI6OmRvKENSUUEoLikpICU+JSAgIyBEbyBDUlFBIG9uIGVhY2ggZ3JvdXAgKGZpbGUpCiAgZHBseXI6OnVuZ3JvdXAoKSAgIyBVbmdyb3VwIChwcm9iLiBub3QgbmVlZGVkLCBkaWRuJ3QgY2hlY2spIAoKRmluYWxfZGF0YTIgPSBtZXJnZShGaW5hbF9kYXRhLCBjcnFhX3Jlc3VsdHMsIGJ5ID0gImZpbGVuYW1lIikKCiMgVG8gd3JpdGUgdGhlIGRhdGEgdG8gYSBjc3YgZmlsZQp3cml0ZS5jc3YoRmluYWxfZGF0YTIsIGZpbGUgPSAiRmluYWxfZGF0YTIuY3N2IikKCmBgYAoKIyMjIENyZWF0aW5nIGNvbnRyb2xzOiBzaHVmZmxlZCBjb250cm9scwogLSBsb29wIHRocm91Z2ggYWxsIHBhaXJzIGFuZCBjb25kaXRpb25zCiAtIHNodWZmbGUgdGhlIHRpbWVzZXJpZXMgKHRha2UgYSB0aW1lc2VyaWVzIGFuZCByZWFycmFuZ2UgaXRzIHZhbHVlcyBpbiBhIHJhbmRvbSBvcmRlcikuIFRpcCBjaGVjayB0aGUgc2FtcGxlKCkgZnVuY3Rpb24KIC0gcnVuIGNycWEgYW5kIHNhdmUgdGhlIG91dHB1dC4gTkIuIHdoaWNoIGRlbGF5LCBlbWJlZCwgcmFkaXVzIHBhcmFtZXRlcnMgc2hvdWxkIHlvdSB1c2U/CiAtIHN0YXRpc3RpY2FsbHkgY29tcGFyZSB0aGUgY3JxYSBpbmRleGVzIGluIHJlYWwgYW5kIHNodWZmbGVkIHBhaXJzCiAKYGBge3J9CiMgVG8gY3JlYXRlIGEgZmlsZSBsaXN0CmZpbGVsaXN0MiA9IGxpc3QuZmlsZXMocGF0aCA9ICJQcmVwcm9jZXNzZWREYXRhIiwgcGF0dGVybiA9ICIuY3N2IikKCiMgVG8gbG9vcCB0aHJvdWdoIGVhY2ggZmlsZSwgc2h1ZmZsZSB0aGUgZGF0YSBhbmQgcGVyZm9ybSBDUlFBIG9uIHRoZSBzaHVmZmxlZCBkYXRhCkNSUUFfc2h1ZmZsZWQgPSBkYXRhLmZyYW1lKCkKbj0xCgpmb3IgKGZpbGUgaW4gZmlsZWxpc3QyKSB7CiAgZD1yZWFkX2NzdihwYXN0ZTAoIlByZXByb2Nlc3NlZERhdGEvIixmaWxlKSkKICAKICBkJEhSMSA9IHNhbXBsZShkJEhSMSkKICBkJEhSMiA9IHNhbXBsZShkJEhSMikKICBkJFJlc3AxID0gc2FtcGxlKGQkUmVzcDEpCiAgZCRSZXNwMiA9IHNhbXBsZShkJFJlc3AyKQogIAogIGRhdGE9Q1JRQShkKQogIAogIGRhdGEkZmlsZW5hbWUgPSBmaWxlbGlzdDJbbl0KICAKICBDUlFBX3NodWZmbGVkPXJiaW5kKGRhdGEsIENSUUFfc2h1ZmZsZWQpCiAgCiAgbj1uKzEKICAKfQoKIyBUbyByZW1vdmUgbGFzdCA0IGNoYXJhY3RlcnMgaW4gZmlsZW5hbWUgKHJlcGxpY2F0aW9uIG9mIC5jc3YpCkNSUUFfc2h1ZmZsZWQkZmlsZW5hbWUgPSBzdWJzdHIoQ1JRQV9zaHVmZmxlZCRmaWxlbmFtZSwxLG5jaGFyKENSUUFfc2h1ZmZsZWQkZmlsZW5hbWUpLTQpCgojIFRvIHNwZWNpZnkgdHlwZSBvZiBDUlFBCmNycWFfcmVzdWx0cyRDUlFBID0gIk5vcm1hbCIKQ1JRQV9zaHVmZmxlZCRDUlFBID0gIlNodWZmbGVkIENvbnRyb2wiCgojIFRvIGNvbWJpbmUgZGF0YXNldApDUlFBX2RhdGEgPSByYmluZChjcnFhX3Jlc3VsdHMsIENSUUFfc2h1ZmZsZWQpCkNSUUFfUmVzcD1zdWJzZXQoQ1JRQV9kYXRhW0NSUUFfZGF0YSR0eXBlID09ICJSZXNwIixdKQpDUlFBX0hSPXN1YnNldChDUlFBX2RhdGFbQ1JRQV9kYXRhJHR5cGUgPT0gIkhSIixdKQoKIyBTdGF0aXN0aWNhbGx5IGNvbXBhcmUgcmVsZXZhbnQgQ1JRQSBpbmRleGVzIGluIG5vcm1hbCBkYXRhIGFuZCBzaHVmZmxlZCBjb250cm9scwptMT1sbShMIH4gQ1JRQSwgQ1JRQV9IUikKc3VtbWFyeShtMSkKCm0yID0gbG0oTH4gQ1JRQSwgQ1JRQV9SZXNwKQpzdW1tYXJ5KG0yKQoKbTM9bG0oUlIgfiBDUlFBLCBDUlFBX0hSKQpzdW1tYXJ5KG0zKQoKbTQgPSBsbShSUn4gQ1JRQSwgQ1JRQV9SZXNwKQpzdW1tYXJ5KG00KQoKbTUgPSBsbSAoRU5UUiB+IENSUUFfSFIpCnN1bW1hcnkobTUpCgptNiA9IGxtKEVOVFIgfiBDUlFBX1Jlc3ApCnN1bW1hcnkobTYpCnN1bW1hcnkobTMpCmBgYAojIyMgVFJJQ0tZISBDcmVhdGluZyBjb250cm9sczogc3Vycm9nYXRlIHBhaXIgY29udHJvbHMKIC0gUGVyIGVhY2ggcmVhbCBwYWlyLCBpZGVudGlmeSBhdCBsZWFzdCBvbmUgc3Vycm9nYXRlIHBhaXIgKG1hdGNoaW5nIG9uZSBvZiB0aGUgcGFydGljaXBhbnRzLCB3aXRoIHNvbWVib2R5IGRvaW5nIHRoZSBzYW1lIHRhc2ssIGJ1dCBpbiBhIGRpZmZlcmVudCBwYWlyKS4gVGlwOiBDZWxpbmUgd2lsbCBzaGFyZSBhIGNvbW1lbnRlZCBzY3JpcHQKIC0gUnVuIGNycWEgb24gYWxsIHRoZSBzdXJyb2dhdGUgcGFpcnMgYW5kIHNhdmUgdGhlIG91dHB1dC4gTkIuIHdoaWNoIGRlbGF5LCBlbWJlZCwgcmFkaXVzIHBhcmFtZXRlcnMgc2hvdWxkIHlvdSB1c2U/CiAtIFRlc3Qgd2hldGhlciBjcnFhIHNob3dzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlYWwgYW5kIHN1cnJvZ2F0ZSBwYWlycwogIyMjIFRlc3RpbmcgZWZmZWN0cyBvZiBjb25kaXRpb25zCiAtIG1ha2UgYSAocHJvYmFibHkgdW5kZXJwb3dlcmVkKSBtaXhlZCBtb2RlbCB0ZXN0aW5nIGVmZmVjdHMgb2YgdGhlIGRpZmZlcmVudCBjb25kaXRpb25zIG9uIGhlYXJ0IHJhdGUgYW5kIHJlc3BpcmF0aW9uIGNvb3JkaW5hdGlvbgogLSBOLkI6IHdvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8gaW5jbHVkZSBzdXJyb2dhdGUgcGFpcnM/IGFuZCBpZiBzbyBob3c/IHdoYXQgd291bGQgdGhhdCB0ZWxsIHlvdT8KYGBge3J9CiNUbyBjcmVhdGUgc3Vycm9nYXRlIHBhaXJzIGZvciBzdHVkeSAxCnByZXByb19maWxlbGlzdCA9IGxpc3QuZmlsZXMocGF0dGVybiA9ICJTdHVkeTEiLCBwYXRoID0gIlByZXByb2Nlc3NlZEFsbCIpICMgbG9hZCB0aGUgcHJlcHJvY2Vzc2VkIGZpbGVzCgpudW09c3RyX2V4dHJhY3RfYWxsKHByZXByb19maWxlbGlzdCwgIlxcZCsiKSAjZXh0cmFjdCBhbGwgbnVtYmVycyBpbiB0aGUgZmlsZSBuYW1lIChpLmUgU3R1ZHk/X0c/X1Q/KQoKZGY9IGFzLmRhdGEuZnJhbWUodChhcy5kYXRhLmZyYW1lKG51bSkpKSAjY3JlYXRlIGEgdHJhbnNwb3NlZCAoaS5lLiAidGlwcGVkIikgZGF0YWZyYW1lIG9mIHRoZXNlIG51bWJlcgpyb3duYW1lcyhkZik8LU5VTEwgI1JlbW92ZSByb3duYW1lcy4KCnBhaXJzPWFzLm51bWVyaWModW5pcXVlKGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGRmJFYyKSkpKSAjY3JlYXRlIHBhaXJzLCBpLmUuIHVuaXF1ZSBncm91cCBudW1iZXJzCgpTdXJyb2dhdGVMaXN0IDwtIGV4cGFuZC5ncmlkKGEgPSBwYWlycywgYiA9IHBhaXJzKSAjIGV4cGFuZC5ncmlkIGNvbWJpbmVzIGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgYSBnaXZlbiB2ZWN0b3IKU3Vycm9nYXRlTGlzdCA9IHN1YnNldChTdXJyb2dhdGVMaXN0LCBhICE9IGIpICMgRW5zdXJlIHRoYXQgcGFpciAxIChpLmUgZ3JvdXAxKSBkb2Vzbid0IGdldCBwYWlyZWQgd2l0aCBpdCBzZWxmLgoKCiMgVG8gc2V0IHdvcmtpbmcgZGlyZWN0b3J5CnNldHdkKCJ+L09uZURyaXZlIC0gQWFyaHVzIHVuaXZlcnNpdGV0L0FVLUNvZ25pdGl2ZSBTY2llbmNlLzNyZCBTZW1lc3Rlci9FeHBlcmltZW50YWwgTWV0aG9kcyAzL0V4ZXJjaXNlL0Fzc2lnbm1lbnRzL0Fzc2lnbm1lbnRfM05FVy9QcmVwcm9jZXNzZWRBbGwiKQojIFBlciBlYWNoIGNvbmRpdGlvbgpmb3IgKGNvIGluIGMoIlN5bmNocm9ub3VzIiwiVHVyblRha2luZyIsIlNlbGZQYWNlZCIpKXsgI2xvb3AgdGhyb3VnaCBhIGxpc3Qgb2YgY29uZGludGlvbnMgCiAgZm9yIChpIGluIDE6bnJvdyhTdXJyb2dhdGVMaXN0KSl7ICNhbmQgbG9vcCB0aHJvdWdoIGFsbCB0aGUgcGFpcmluZ3Mgb2YgdGhlIHN1cnJvZ2F0ZSBsaXN0CiAgICAKICAjc3RhcnQgcmVjcmVhdGUgZmlsZW5hbWVzIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGJhc2VkIG9uIHRoZSBtYXRjaGluZyBmcm9tIHRoZSBzdXJyb2dhdGVsaXN0CiAgZjE9cGFzdGUwKCdTdHVkeTFfRycsU3Vycm9nYXRlTGlzdCRhW2ldKSAjSW5zZXJ0IGdyb3VwIG51bWViZXIgZnJvbSBTdXJyb2dhdGVsaXN0IAogIGYyPXBhc3RlMCgnU3R1ZHkxX0cnLFN1cnJvZ2F0ZUxpc3QkYltpXSkKICAKICBmaWxlMT1wcmVwcm9fZmlsZWxpc3RbZ3JlcGwoZjEscHJlcHJvX2ZpbGVsaXN0KSAmIGdyZXBsKGNvLHByZXByb19maWxlbGlzdCldICNpbnNlcnQgY29uZGl0aW9ucyBhcyB3ZWxsLgogIGZpbGUyPXByZXByb19maWxlbGlzdFtncmVwbChmMixwcmVwcm9fZmlsZWxpc3QpICYgZ3JlcGwoY28scHJlcHJvX2ZpbGVsaXN0KV0KICAKICBkMT1yZWFkLmNzdihmaWxlMSkgI0xvYWQgdGhlIHJlY3JlYXRlZCBmaWxlbmFtZXMKICAKICBkMj1yZWFkLmNzdihmaWxlMikgCiAgCiAgI0Vuc3VyZSBib3RoIGRhdGFmcmFtZXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgKICBpZiAobnJvdyhkMSk+bnJvdyhkMikpewogICAgZDE9ZDFbMTpucm93KGQyKSxdCiAgfSBlbHNlIHsKICAgIGQyPWQyWzE6bnJvdyhkMSksXQogIH0KICAKICAjY3JlYXRpb24gb2Ygc3Vycm9nYXRlIGZpbGVzLiAoUmljY2FyZG8ncyBpZGVhIG9mIGhhdmluZyBmdW4gYW5kIGNvbXBsZXRlbHkgb3ZlcmRvaW5nIGl0IDstKSApIAogICNwZXIgZWFjaCAyIHBhaXJzIHRoZXJlIGFyZSA0IHBvc3NpYmxlIHN1cnJvZ2F0ZSBwYWlyczogCiAgI3BhaXIxcGVyc29uMSB3IHBhaXIycGVyc29uMjsgCiAgZDM9ZGF0YS5mcmFtZShSZXNwMT1kMSRSZXNwMSxSZXNwMj1kMiRSZXNwMixIUjE9ZDEkSFIxLEhSMj1kMiRIUjIpCiAgI3BhaXIxcGVyc29uMiB3IHBhaXIycGVyc29uMjsKICBkND1kYXRhLmZyYW1lKFJlc3AxPWQyJFJlc3AxLFJlc3AyPWQxJFJlc3AyLEhSMT1kMiRIUjEsSFIyPWQxJEhSMikKICAKICAjcGFpcjFwZXJzb24xIHcgcGFpcjJwZXJzb24xOwogIGQ1PWRhdGEuZnJhbWUoUmVzcDE9ZDEkUmVzcDEsUmVzcDI9ZDIkUmVzcDEsSFIxPWQxJEhSMSxIUjI9ZDIkSFIxKQogICNwYWlyMXBlcnNvbjIgdyBwYWlyMnBlcnNvbjIKICBkNj1kYXRhLmZyYW1lKFJlc3AxPWQyJFJlc3AyLFJlc3AyPWQxJFJlc3AyLEhSMT1kMiRIUjIsSFIyPWQxJEhSMikKICAKICAjTWFrZSBmaWxlbmFtZXMgdGhhdCB0ZWxscyB3aGljaCBwYWlycyBoYXZlIGJlZW4gbWl4ZWQKICBmaWxlMz1wYXN0ZTAoIlN0dWR5MV9TdXJyb2dhdGVHcm91cCIsU3Vycm9nYXRlTGlzdCRhW2ldLCImIixTdXJyb2dhdGVMaXN0JGJbaV0sImFfIixjbywiLmNzdiIpCiAgZmlsZTQ9cGFzdGUwKCJTdHVkeTFfU3Vycm9nYXRlR3JvdXAiLFN1cnJvZ2F0ZUxpc3QkYVtpXSwiJiIsU3Vycm9nYXRlTGlzdCRiW2ldLCJiXyIsY28sIi5jc3YiKQogIGZpbGU1PXBhc3RlMCgiU3R1ZHkxX1N1cnJvZ2F0ZUdyb3VwIixTdXJyb2dhdGVMaXN0JGFbaV0sIiYiLFN1cnJvZ2F0ZUxpc3QkYltpXSwiY18iLGNvLCIuY3N2IikKICBmaWxlNj1wYXN0ZTAoIlN0dWR5MV9TdXJyb2dhdGVHcm91cCIsU3Vycm9nYXRlTGlzdCRhW2ldLCImIixTdXJyb2dhdGVMaXN0JGJbaV0sImRfIixjbywiLmNzdiIpCiAgCiAgI3dyaXRlIGNzdiBmaWxlcwogIHdyaXRlX2NzdihkMyxmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTMpKQogIHdyaXRlX2NzdihkNCxmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTQpKQogIHdyaXRlX2NzdihkNSxmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTUpKQogIHdyaXRlX2NzdihkNixmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTYpKQogIH0KfQoKIyBUbyBjcmVhdGUgc3Vycm9nYXRlIHBhaXJzIGZvciBTdHVkeSAyCgpwcmVwcm9fZmlsZWxpc3QgPSBsaXN0LmZpbGVzKHBhdHRlcm4gPSAiU3R1ZHkyIikgIyBsb2FkIHRoZSBwcmVwcm9jZXNzZWQgZmlsZXMKCm51bT1zdHJfZXh0cmFjdF9hbGwocHJlcHJvX2ZpbGVsaXN0LCAiXFxkKyIpICNleHRyYWN0IGFsbCBudW1iZXJzIGluIHRoZSBmaWxlIG5hbWUgKGkuZSBTdHVkeT9fRz9fVD8pCgpkZj0gYXMuZGF0YS5mcmFtZSh0KGFzLmRhdGEuZnJhbWUobnVtKSkpICNjcmVhdGUgYSB0cmFuc3Bvc2VkIChpLmUuICJ0aXBwZWQiKSBkYXRhZnJhbWUgb2YgdGhlc2UgbnVtYmVyCnJvd25hbWVzKGRmKTwtTlVMTCAjUmVtb3ZlIHJvd25hbWVzLgoKcGFpcnM9YXMubnVtZXJpYyh1bmlxdWUoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoZGYkVjIpKSkpICNjcmVhdGUgcGFpcnMsIGkuZS4gdW5pcXVlIGdyb3VwIG51bWJlcnMKClN1cnJvZ2F0ZUxpc3QgPC0gZXhwYW5kLmdyaWQoYSA9IHBhaXJzLCBiID0gcGFpcnMpICMgZXhwYW5kLmdyaWQgY29tYmluZXMgYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiBhIGdpdmVuIHZlY3RvcgpTdXJyb2dhdGVMaXN0ID0gc3Vic2V0KFN1cnJvZ2F0ZUxpc3QsIGEgIT0gYikgIyBFbnN1cmUgdGhhdCBwYWlyIDEgKGkuZSBncm91cDEpIGRvZXNuJ3QgZ2V0IHBhaXJlZCB3aXRoIGl0IHNlbGYuCgojIFBlciBlYWNoIGNvbmRpdGlvbgpmb3IgKGNvIGluIGMoIlN5bmNocm9ub3VzIiwiVHVyblRha2luZyIsIkNvbnZlcnNhdGlvbiIpKXsgI2xvb3AgdGhyb3VnaCBhIGxpc3Qgb2YgY29uZGludGlvbnMgCiAgZm9yIChpIGluIDE6bnJvdyhTdXJyb2dhdGVMaXN0KSl7ICNhbmQgbG9vcCB0aHJvdWdoIGFsbCB0aGUgcGFpcmluZ3Mgb2YgdGhlIHN1cnJvZ2F0ZSBsaXN0CiAgICAKICAjc3RhcnQgcmVjcmVhdGUgZmlsZW5hbWVzIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGJhc2VkIG9uIHRoZSBtYXRjaGluZyBmcm9tIHRoZSBzdXJyb2dhdGVsaXN0CiAgZjE9cGFzdGUwKCdTdHVkeTJfRycsU3Vycm9nYXRlTGlzdCRhW2ldKSAjSW5zZXJ0IGdyb3VwIG51bWViZXIgZnJvbSBTdXJyb2dhdGVsaXN0IAogIGYyPXBhc3RlMCgnU3R1ZHkyX0cnLFN1cnJvZ2F0ZUxpc3QkYltpXSkKICAKICBmaWxlMT1wcmVwcm9fZmlsZWxpc3RbZ3JlcGwoZjEscHJlcHJvX2ZpbGVsaXN0KSAmIGdyZXBsKGNvLHByZXByb19maWxlbGlzdCldICNpbnNlcnQgY29uZGl0aW9ucyBhcyB3ZWxsLgogIGZpbGUyPXByZXByb19maWxlbGlzdFtncmVwbChmMixwcmVwcm9fZmlsZWxpc3QpICYgZ3JlcGwoY28scHJlcHJvX2ZpbGVsaXN0KV0KICAKICBkMT1yZWFkLmNzdihmaWxlMSkgI0xvYWQgdGhlIHJlY3JlYXRlZCBmaWxlbmFtZXMKICAKICBkMj1yZWFkLmNzdihmaWxlMikgCiAgCiAgI0Vuc3VyZSBib3RoIGRhdGFmcmFtZXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgKICBpZiAobnJvdyhkMSk+bnJvdyhkMikpewogICAgZDE9ZDFbMTpucm93KGQyKSxdCiAgfSBlbHNlIHsKICAgIGQyPWQyWzE6bnJvdyhkMSksXQogIH0KICAKICAjY3JlYXRpb24gb2Ygc3Vycm9nYXRlIGZpbGVzLiAoUmljY2FyZG8ncyBpZGVhIG9mIGhhdmluZyBmdW4gYW5kIGNvbXBsZXRlbHkgb3ZlcmRvaW5nIGl0IDstKSApIAogICNwZXIgZWFjaCAyIHBhaXJzIHRoZXJlIGFyZSA0IHBvc3NpYmxlIHN1cnJvZ2F0ZSBwYWlyczogCiAgI3BhaXIxcGVyc29uMSB3IHBhaXIycGVyc29uMjsgCiAgZDM9ZGF0YS5mcmFtZShSZXNwMT1kMSRSZXNwMSxSZXNwMj1kMiRSZXNwMixIUjE9ZDEkSFIxLEhSMj1kMiRIUjIpCiAgI3BhaXIxcGVyc29uMiB3IHBhaXIycGVyc29uMjsKICBkND1kYXRhLmZyYW1lKFJlc3AxPWQyJFJlc3AxLFJlc3AyPWQxJFJlc3AyLEhSMT1kMiRIUjEsSFIyPWQxJEhSMikKICAKICAjcGFpcjFwZXJzb24xIHcgcGFpcjJwZXJzb24xOwogIGQ1PWRhdGEuZnJhbWUoUmVzcDE9ZDEkUmVzcDEsUmVzcDI9ZDIkUmVzcDEsSFIxPWQxJEhSMSxIUjI9ZDIkSFIxKQogICNwYWlyMXBlcnNvbjIgdyBwYWlyMnBlcnNvbjIKICBkNj1kYXRhLmZyYW1lKFJlc3AxPWQyJFJlc3AyLFJlc3AyPWQxJFJlc3AyLEhSMT1kMiRIUjIsSFIyPWQxJEhSMikKICAKICAjTWFrZSBmaWxlbmFtZXMgdGhhdCB0ZWxscyB3aGljaCBwYWlycyBoYXZlIGJlZW4gbWl4ZWQKICBmaWxlMz1wYXN0ZTAoIlN0dWR5Ml9TdXJyb2dhdGVHcm91cCIsU3Vycm9nYXRlTGlzdCRhW2ldLCImIixTdXJyb2dhdGVMaXN0JGJbaV0sImFfIixjbywiLmNzdiIpCiAgZmlsZTQ9cGFzdGUwKCJTdHVkeTJfU3Vycm9nYXRlR3JvdXAiLFN1cnJvZ2F0ZUxpc3QkYVtpXSwiJiIsU3Vycm9nYXRlTGlzdCRiW2ldLCJiXyIsY28sIi5jc3YiKQogIGZpbGU1PXBhc3RlMCgiU3R1ZHkyX1N1cnJvZ2F0ZUdyb3VwIixTdXJyb2dhdGVMaXN0JGFbaV0sIiYiLFN1cnJvZ2F0ZUxpc3QkYltpXSwiY18iLGNvLCIuY3N2IikKICBmaWxlNj1wYXN0ZTAoIlN0dWR5Ml9TdXJyb2dhdGVHcm91cCIsU3Vycm9nYXRlTGlzdCRhW2ldLCImIixTdXJyb2dhdGVMaXN0JGJbaV0sImRfIixjbywiLmNzdiIpCiAgCiAgI3dyaXRlIGNzdiBmaWxlcwogIHdyaXRlX2NzdihkMyxmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTMpKQogIHdyaXRlX2NzdihkNCxmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTQpKQogIHdyaXRlX2NzdihkNSxmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTUpKQogIHdyaXRlX2NzdihkNixmaWxlLnBhdGgoInN1cnJvZ2F0ZSIsZmlsZTYpKQogIH0KfQoKc2V0d2QoIn4vT25lRHJpdmUgLSBBYXJodXMgdW5pdmVyc2l0ZXQvQVUtQ29nbml0aXZlIFNjaWVuY2UvM3JkIFNlbWVzdGVyL0V4cGVyaW1lbnRhbCBNZXRob2RzIDMvRXhlcmNpc2UvQXNzaWdubWVudHMvQXNzaWdubWVudF8zTkVXL1ByZXByb2Nlc3NlZEFsbCIpCgojIFRvIGNyZWF0ZSBuZXcgZmlsZWxpc3QKZmlsZWxpc3QzID0gbGlzdC5maWxlcyhwYXRoID0gInN1cnJvZ2F0ZSIpIAoKIyBUbyBwZXJmb3JtIENSUUEgb24gc3Vycm9nYXRlIHBhaXJzCkNSUUFfc3Vycm9nYXRlID0gZGF0YS5mcmFtZSgpCm49MQoKZm9yIChmaWxlIGluIGZpbGVsaXN0MykgewogIGQ9cmVhZF9jc3YocGFzdGUwKCJzdXJyb2dhdGUvIixmaWxlKSkKICAKICBkYXRhPUNSUUEoZCkKICAKICBkYXRhJGZpbGVuYW1lID0gZmlsZWxpc3QzW25dCiAgCiAgQ1JRQV9zdXJyb2dhdGU9cmJpbmQoZGF0YSwgQ1JRQV9zdXJyb2dhdGUpCiAgCiAgbj1uKzEKICAKfQoKIyBUbyBzYXZlIHRoZSBmaWxlIHRvIGEgY3N2IGZpbGUKd3JpdGUuY3N2KENSUUFfc3Vycm9nYXRlLCBmaWxlID0gIkNSUUFfc3Vycm9nYXRlLmNzdiIpCgojIFRvIHNwZWNpZnkgdHlwZSBvZiBDUlFBCkNSUUFfc3Vycm9nYXRlJENSUUEgPSAiU3Vycm9nYXRlIgoKIyBUbyBjb21iaW5lIGRhdGFzZXQKQ1JRQV9kYXRhID0gcmJpbmQoQ1JRQV9kYXRhLCBDUlFBX3N1cnJvZ2F0ZSkKQ1JRQV9SZXNwPXN1YnNldChDUlFBX2RhdGFbQ1JRQV9kYXRhJHR5cGUgPT0gIlJlc3AiLF0pCkNSUUFfSFI9c3Vic2V0KENSUUFfZGF0YVtDUlFBX2RhdGEkdHlwZSA9PSAiSFIiLF0pCgojI0hFUkUKIyBTdGF0aXN0aWNhbGx5IGNvbXBhcmUgQ1JRQSBpbmRleGVzIGJldHdlZW4gbm9ybWFsIGFuZCBzdXJyb2dhdGUgcGFpcnMgCm0xPWxtKEwgfiBDUlFBLCBDUlFBX0hSKQpzdW1tYXJ5KG0xKQoKbTIgPSBsbShMfiBDUlFBLCBDUlFBX1Jlc3ApCnN1bW1hcnkobTIpCgptMz1sbShFTlRSIH4gQ1JRQSwgQ1JRQV9IUikKc3VtbWFyeShtMykKCm00ID0gbG0oRU5UUn4gQ1JRQSwgQ1JRQV9SZXNwKQpzdW1tYXJ5KG00KQoKbTU9bG0oUlIgfiBDUlFBLCBDUlFBX0hSKQpzdW1tYXJ5KG01KQoKbTYgPSBsbShSUiB+IENSUUEsIENSUUFfUmVzcCkKc3VtbWFyeShtNikKCgpgYGAKIyMjIFRlc3RpbmcgZWZmZWN0cyBvZiBjb25kaXRpb25zCi0gbWFrZSBhIChwcm9iYWJseSB1bmRlcnBvd2VyZWQpIG1peGVkIG1vZGVsIHRlc3RpbmcgZWZmZWN0cyBvZiB0aGUgZGlmZmVyZW50IGNvbmRpdGlvbnMgb24gaGVhcnQgcmF0ZSBhbmQgcmVzcGlyYXRpb24gY29vcmRpbmF0aW9uCi0gTi5COiB3b3VsZCBpdCBtYWtlIHNlbnNlIHRvIGluY2x1ZGUgc3Vycm9nYXRlIHBhaXJzPyBhbmQgaWYgc28gaG93PyB3aGF0IHdvdWxkIHRoYXQgdGVsbCB5b3U/CmBgYHtyfQpGaW5hbF9kYXRhMng9cmVhZC5jc3YoIkZpbmFsX2RhdGEyLmNzdiIpCiMgVG8gc3Vic2V0IGRhdGEgaW50byBoZWFydCByYXRlIGFuZCByZXNwaXJhdGlvbiBkYXRhCkZpbmFsZGF0YV9SZXNwPXN1YnNldChGaW5hbF9kYXRhMnhbRmluYWxfZGF0YTJ4JHR5cGUgPT0gIlJlc3AiLF0pCkZpbmFsZGF0YV9IUj1zdWJzZXQoRmluYWxfZGF0YTJ4W0ZpbmFsX2RhdGEyeCR0eXBlID09ICJIUiIsXSkKCiMgVG8gc3RhdGlzdGljYWxseSBpbnZlc3RpZ2F0ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY29uZGl0aW9uIGFuZCBDUlFBIHBhcmFtZXRlcnMKbV9SUl9yZXNwPWxtZXIoUlIgfiBDb25kaXRpb24gKyAoMXxTdHVkeSkgKyAoMStUcmlhbHxHcm91cCkgLCBGaW5hbGRhdGFfUmVzcCkKc3VtbWFyeShtX1JSX3Jlc3ApCgptX1JSX0hSPWxtZXIoUlIgfiBDb25kaXRpb24gKyAoMXxTdHVkeSkgKyAoMStUcmlhbHxHcm91cCkgLCBGaW5hbGRhdGFfSFIpCnN1bW1hcnkobV9SUl9IUikKCm1fTF9yZXNwPWxtZXIoTCB+IENvbmRpdGlvbiArICgxfFN0dWR5KSArICgxK1RyaWFsfEdyb3VwKSAsIEZpbmFsZGF0YV9SZXNwKQpzdW1tYXJ5KG1fTF9yZXNwKQoKbV9MX0hSPWxtZXIoTCB+IENvbmRpdGlvbiArICgxfFN0dWR5KSArICgxK1RyaWFsfEdyb3VwKSAsIEZpbmFsZGF0YV9IUikKc3VtbWFyeShtX0xfSFIpCgptX0VOVFJfcmVzcD1sbWVyKEVOVFIgfiBDb25kaXRpb24gKyAoMXxTdHVkeSkgKyAoMStUcmlhbHxHcm91cCkgLCBGaW5hbGRhdGFfUmVzcCkKc3VtbWFyeShtX0VOVFJfcmVzcCkKCm1fRU5UUl9IUj1sbWVyKEVOVFIgfiBDb25kaXRpb24gKyAoMXxTdHVkeSkgKyAoMStUcmlhbHxHcm91cCkgLCBGaW5hbGRhdGFfSFIpCnN1bW1hcnkobV9FTlRSX0hSKQoKc3VtbWFyeShtX1JSX0hSKQpzdW1tYXJ5KG1fTF9IUikKc3VtbWFyeShtX0VOVFJfSFIpCgpzdW1tYXJ5KG1fUlJfcmVzcCkKc3VtbWFyeShtX0xfcmVzcCkKc3VtbWFyeShtX0VOVFJfcmVzcCkKCmBgYAogCiMjIyBFZmZlY3RzIG9mIHJlc3BpcmF0aW9uIGNvb3JkaW5hdGlvbiBvbiBoZWFydCByYXRlIGNvb3JkaW5hdGlvbgogLSBkZXNjcmliZSBob3cgeW91IHdvdWxkIHRlc3QgdGhvc2Uu